scrapy跳转html,如何结合使用scrapy和htmlunit来使用javascript抓取网址

小编典典

下面是一个在下载处理程序中间件中使用selenium和phantomjs headless webdriver的工作示例。

class JsDownload(object):

@check_spider_middleware

def process_request(self, request, spider):

driver = webdriver.PhantomJS(executable_path='D:\phantomjs.exe')

driver.get(request.url)

return HtmlResponse(request.url, encoding='utf-8', body=driver.page_source.encode('utf-8'))

我希望能够告诉不同的Spider使用哪个中间件,因此我实现了这个包装器:

def check_spider_middleware(method):

@functools.wraps(method)

def wrapper(self, request, spider):

msg = '%%s %s middleware step' % (self.__class__.__name__,)

if self.__class__ in spider.middleware:

spider.log(msg % 'executing', level=log.DEBUG)

return method(self, request, spider)

else:

spider.log(msg % 'skipping', level=log.DEBUG)

return None

return wrapper

settings.py:

DOWNLOADER_MIDDLEWARES = {'MyProj.middleware.MiddleWareModule.MiddleWareClass': 500}

为了使包装工作,所有spider必须至少具有:

middleware = set([])

包括中间件:

middleware = set([MyProj.middleware.ModuleName.ClassName])

以这种方式而不是在spider网中实现它的主要优点是,你最终只会发出一个请求。例如,在reclosedev的第二个链接的解决方案中:下载处理程序处理请求,然后将响应传递给spider。然后,spider程序会在其parse_page函数中提出一个全新的请求-这是对相同内容的两个请求。

2020-04-08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值