scrapy的架构图如下:

在下载组件和scrapy引擎中间有一个DownloaderMiddleware(下载中间件)中间件,通过修改这个中间件,使得scrapy通过无头浏览器来下载网页内容!

如左图所示,在这个文件里面修改scrapy中间件。
以下定义一个最简单的chrome浏览器来爬取网页!
class SeleniumMiddleware(object):
def __init__(self):
self.logger = getLogger(__name__)
self.browser = webdriver.Chrome()
self.browser.set_window_size(1400, 700)
def __del__(self):
"""
用于关闭浏览器
:return:
"""
self.browser.close()
def process_request(self, request, spider):
"""
用chrome抓取页面
:param request: Request对象
:param spider: Spider对象
:return: HtmlResponse
"""
self.logger.debug('Chrome is Starting')
self.browser.get(request.url)
content = self.browser.page_source.encode('utf-8')
if content.strip() != '':
return HtmlResponse(request.url, encoding='utf-8', body=content, request=request)
return None
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
# Scrapy使用此方法创建您的蜘蛛。
return cls()
接下来就需要setting.py文件中开启这一个中间件:
DOWNLOADER_MIDDLEWARES = {
'taobao.middlewares.SeleniumMiddleware': 543,
}
这里因为已经把下载的中间件设置为了自己自定义的,所以scrapy原本自带的下载中间件就不会再生效了。
