相关疑难解决方法(0)

Scrapy:如何打印请求引用者

是否可以从解析函数中的响应对象获取请求引用者?

10倍

python scrapy

14
推荐指数
1
解决办法
8068
查看次数

将标题添加到 Scrapy Spider

对于一个项目,我正在运行大量针对某些搜索词的 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
Run Code Online (Sandbox Code Playgroud)

我找到了一个讨论与 BeautifulSoup 类似问题的线程。解决方案是向脚本添加标头,从而使其使用浏览器作为用户代理:

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)
Run Code Online (Sandbox Code Playgroud)

不过,在 Scrapy 中应用标头的方法似乎有所不同。有谁知道如何最好地将它包含在 Scrapy 中,特别是参考start_urls …

python scrapy

3
推荐指数
1
解决办法
5906
查看次数

标签 统计

python ×2

scrapy ×2