如何改变请求处理?

时间:2014-07-31 19:09:07

标签: python selenium web-scraping scrapy

是否可以在Scrapy中更改请求处理? 例如,如果我希望特定的URL不是由scrapys stanard机器请求,而是使用Selenium,并使我能够使用Selenium驱动程序方法进行操作。

怎么做?

2 个答案:

答案 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}}应该演示如何执行此操作。