使用Scrapy捕获Google搜索字词和ResultStats

时间:2019-02-10 17:20:38

标签: python scrapy

我使用Scrapy构建了一个非常简单的刮板。对于输出表,我想显示Google新闻搜索词以及Google resultstats值。

我要捕获的信息显示在Google页面的源中

<input class="gsfi" value="Elon Musk">

<div id="resultStats">About 52,300 results</div>

我已经尝试通过('input.value::text')('id.resultstats::text')都包括在内,但是都没有用。有谁知道如何解决这种情况?

import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['google.com']
    start_urls = ['https://www.google.com/search?q=elon+musk&source=lnt&tbs=cdr%3A1%2Ccd_min%3A1%2F1%2F2015%2Ccd_max%3A12%2F31%2F2015&tbm=nws']

def parse(self, response):
    for quote in response.css('div.quote'):
        item = {
            'search_title': quote.css('input.value::text').extract(),
            'results': quote.css('id.resultstats::text').extract(),
            }
        yield item

1 个答案:

答案 0 :(得分:1)

使用Scrapy访问页面时,页面的呈现方式会有所不同。

搜索字段变为:

response.css('input#sbhost::attr(value)').get()

结果计数为:

response.css('#resultStats::text').get()

此外,该页面上没有quote类。

您可以在scrapy shell中对此进行测试:

scrapy shell -s ROBOTSTXT_OBEY=False "https://www.google.com/search?q=elon+musk&source=lnt&tbs=cdr%3A1%2Ccd_min%3A1%2F1%2F2015%2Ccd_max%3A12%2F31%2F2015&tbm=nws"

然后运行这两个命令。

[编辑] 如果您的目标是让每个URL 一个项目,则可以执行以下操作:

def parse(self, response):
    item = {
        'search_title': response.css('input#sbhost::attr(value)').get(),
        'results': response.css('#resultStats::text').get(),
    }
    yield item

如果您的目标是提取页面上的每个结果,那么您需要有所不同。