栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何结合使用scrapy和htmlunit来使用javascript抓取网址

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何结合使用scrapy和htmlunit来使用javascript抓取网址

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

class JsDownload(object):@check_spider_middlewaredef 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.enpre('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 Nonereturn wrappersettings.py:DOWNLOADER_MIDDLEWARES = {'MyProj.middleware.MiddleWareModule.MiddleWareClass': 500}

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

middleware = set([])

包括中间件:

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号