我正在从实现的某个机制中抓取数据的网站,如果它检测到我的请求太频繁,那么帐户就会被锁定,请求将被重定向到一个用户验证页面,在该页面中,它需要用户滑动一个条才能解锁。
selenium ActionChain很容易解决滑动条的问题,但是我不知道在Scrapy中添加这个功能的位置。
基本上,在我的抓取蜘蛛中,对于我想要的每一个请求:
您可以看到,在步骤2中,刮伤蜘蛛将需要两次请求相同的url,selenium webdriver则需要请求一次url。我不知道如何在scrapy框架中实现这一点。有什么想法吗?
下面是我的蜘蛛结构,我不知道在哪里添加上述功能。还是应该使用中间件?
class MySpider(scrapy.Spider):
name = 'my_spider'
def start_request(self):
# read urls from external file
urls = [...]
for url in urls:
yield scrapy.Request(url) # the response could be a user validation page
def parse(self, response):
# parse a valid page and scrape data
yield item- 2018-03-19更新
我想我找到了一个更好的方法来实现这个功能。最后,我创建了一个中间件类,以便它是可重用的,并且代码库是干净的。
发布于 2018-02-15 02:01:55
class MySpider(scrapy.Spider):
name = 'my_spider'
def start_request(self):
# read urls from external file
urls = [...]
for url in urls:
yield scrapy.Request(url) # the response could be a user validation page
def parse(self, response):
# check if it's the user validation page
# here i assume you know how to judge if it's a user validation page
if validation page:
#Selenium goes here
browser = webdriver.PhantomJS()
...
yield scrapy.Request(browser.current_url) # send the request again
# not the validation page
else:
#parse the data
yield itemhttps://stackoverflow.com/questions/48798903
复制相似问题