Scrapy和谷歌网络抓取

时间:2015-10-05 01:39:47

标签: mongodb xpath web-scraping scrapy scrapy-spider

我正在尝试利用scrapy收集谷歌搜索结果并将它们放入MongoDB。但是,我没有得到任何回复......我错过了什么?

看起来很简单。

# -*- coding: utf-8 -*-
import scrapy


class GoogleSpider(scrapy.Spider):
    name = "google"
    allowed_domains = ["google.com"]
    start_urls = (
        'https://www.google.com/#q=site:www.linkedin.com%2Fpub+intext:(security+or+jsp)+and+(power+or+utility)',
    )

    def parse(self, response):
        for sel in response.xpath('//*[@id="rso"]/div/div[1]/div/h3'):
            title = sel.xpath('a/text()').extract()
            link = sel.xpath('a/@href').extract()
            desc = sel.xpath('text()').extract()
            print title, link, desc
        pass

1 个答案:

答案 0 :(得分:1)

您错过了响应没有您使用XPath请求的元素。

这是因为您在使用Scrapy和使用浏览器时看到了其他网站。这是因为当您致电start_url时,它会加载Google,然后会发送XHR请求来查询搜索。

Scrapy不会发送此XHR调用,因为这些内容是由JavaScript启动的,而不是由Scrapy执行。

要查看scrapy在调用此URL时获得的内容,并查看是否找到了您的期望,请使用Scrapy Shell:

scrapy shell "https://www.google.com/#q=site:www.linkedin.com%2Fpub+intext:(security+or+jsp)+and+(power+or+utility)"

然后,当出现命令提示符时,您可以看到无法获得结果的原因:

>>> response.xpath('//*[@id="rso"]/div/div[1]/div/h3')
[]
>>>

因此,Scrapy因为缺少内容而找不到任何内容。