【发布时间】:2019-02-13 12:12:41
【问题描述】:
对于一个项目,我正在运行大量针对某些搜索词的 Scrapy 请求。这些请求使用相同的搜索词但不同的时间范围,如下面 URL 中的日期所示。
尽管 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
请在下面找到我收到的给定请求的输出:
【问题讨论】:
-
这三个网址的输出是否“相同”?
-
我刚刚将输出添加到原始问题文本中
-
您对输出的期望是什么?
search_title对于您的所有 URL 都是相同的,因此在输出中将是相同的。url值显然是不同的。而results可能是一样的,因为这是 Google 决定给你的。 -
这些都应该引用不同的网页,因此产生不同的结果。根据源文本,搜索范围“2005”的 resultStats 值例如是
<div id="resultStats">About 455 results<nobr> -
当您在浏览器中打开一个 URL 时,您很可能会看到不同的结果。 Google 可能会识别出您是机器人并返回一些通用缓存值(例如 14,500,000)您需要关注的是通过运行
scrapy shell可以看到的结果。 那 是蜘蛛的作用——不是你在浏览器中看到的。如果您在 shell 中看到这些值,那么这就是您在运行蜘蛛程序时将得到的。