是否可以在Scrapy中更改请求处理? 例如,如果我希望特定的URL不是由scrapys stanard机器请求,而是使用Selenium,并使我能够使用Selenium驱动程序方法进行操作。
怎么做?
答案 0 :(得分:0)
您不必更改请求,只需在蜘蛛中执行Selenium即可。
def parse(self, response):
browser = webdriver.Firefox()
for i in response.xpath("//a/@href").extract():
browser.get(i)
#then do other stuff
但根据我的经验,只有极少数的东西你不能单独使用scrapy。 你有链接来展示你正在寻找什么样的东西吗?
答案 1 :(得分:0)
您要写的是downloader middleware component。你问是否可以改变请求处理&#34 ;;它的介绍说它是一个全球改变Scrapy的请求和响应的系统&#34 ;;我不知道为什么你不会认为这是你正在寻找的东西,但是如果你继续读下去,那就听起来就是这样。
DownloaderMiddleware
对象中的关键方法是process_request
。正如文档所说:
为每个通过下载中间件的请求调用此方法。
process_request()
应:return None
,返回Response
个对象,返回Request
个对象,或者引发IgnoreRequest
。...
如果它返回
Response
个对象,Scrapy将不会打扰调用任何其他process_request()
或process_exception()
方法或相应的下载功能;它会回复那个回应。
所以,你只需写一个DownloaderMiddleware
process_request
调用Selenium,处理它返回的内容,并将其包含在Response
中。
如果内置HttpCacheMiddleware
不明显,内置{{1}}应该演示如何执行此操作。