使用scrapy结合selenium和PhantomJS抓取动态内容,感觉是多余的?

发布于 2022-09-04 00:39:38 字数 395 浏览 8 评论 0

爬虫初学者的疑问
看了scarpy框架图,有个疑问。
如果在DownloadMiddleware中添加selenium+PhantomJS抓取动态内容的话,事实上等于发了两次请求,一次请求由Scrapy发,另一次请求由selenium发出,这样第一个是不是有点多余,而且还降低了效率,我这个说法对吗?
麻烦请各位大神解答。如果,的确冗余,除了单独用selenium和PhantomJS来抓取以外,结合scrapy有什么方法能通过代码的方式,让Scrapy不发请求?

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

有木有妳兜一样 2022-09-11 00:39:38

在settings.py加入

DOWNLOADER_MIDDLEWARES = {
'jdSpider.middlewares.middleware.JavaScriptMiddleware':543,#键为中间件类的路径,值为中间件的顺序
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,#禁止内置的中间件
}

下面贴上,自定义中间件的代码:

fromseleniumimportwebdriver
fromscrapy.httpimportHtmlResponse
importtime

classJavaScriptMiddleware(object):

defprocess_request(self, request, spider):
ifspider.name =="jd":
print"PhantomJS is starting..."
driver = webdriver.PhantomJS() #指定使用的浏览器

driver = webdriver.Firefox()

driver.get(request.url)
time.sleep(1)
js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js) #可执行js,模仿用户操作。此处为将页面拉至最底端。
time.sleep(3)
body = driver.page_source
print("访问"+request.url)
returnHtmlResponse(driver.current_url, body=body, encoding='utf-8', request=request)
else:
return

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文