对于一个项目,我正在对某些搜索词进行大量的Scrapy请求。这些请求使用相同的搜索词,但使用不同的时间范围,如以下网址中的日期所示。
尽管URL引用的日期和页面不同,但我收到的值与所有请求的输出相同。看来脚本正在获取获得的第一个值,并将相同的输出分配给所有后续请求。
有人知道这些“结果重复”的原因是什么,如何解决?
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['google.com']
start_urls = ['https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2004%2Ccd_max%3A12%2F31%2F2004&tbm=nws',
'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2005%2Ccd_max%3A12%2F31%2F2005&tbm=nws',
'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2006%2Ccd_max%3A12%2F31%2F2006&tbm=nws',
]
def parse(self, response):
item = {
'search_title': response.css('input#sbhost::attr(value)').get(),
'results': response.css('#resultStats::text').get(),
'url': response.url,
}
yield item
请在下面找到我为给定请求所收到的输出:
答案 0 :(得分:0)
我实际上找到了一个线程discussing a similar problem with BeautifulSoup。解决方案是在此脚本中添加标头,从而使脚本使用浏览器作为User-Agent。
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
}
payload = {'as_epq': 'James Clark', 'tbs':'cdr:1,cd_min:01/01/2015,cd_max:01/01/2015', 'tbm':'nws'}
r = requests.get("https://www.google.com/search", params=payload, headers=headers)
将标头引用应用于Scrapy seems to be different though的方法。有谁知道如何最好地将其包含在脚本中,尤其是参考start_urls
时?