python - 尝试使用scrapy抓取值

标签 python web-crawler scrapy

我尝试使用以下代码从网页中抓取“每月总收入中位数”:

class crawl_income(scrapy.Spider):

     name = "salary"
     allowed_domains = ["stats.mom.gov.sg"]
     url = 'http://stats.mom.gov.sg/Pages/Income-Summary-Table.aspx'

     def parse_data(self, response):
         table_headers = response.xpath('//tr[@class="odd"]/td/td')
         salary = []
         for value in table_headers:
             data = value.xpath('.//text()').extract()
             salary.append(data)
         print salary

process = CrawlerProcess()
process.crawl(crawl_income)

process.start()

但是当我尝试打印我创建的用于存储值的列表时,我没有看到任何值。

我哪里出错了?

最佳答案

首先,您的代码将无法工作。

url 应该是 start_urls 让 Scrapy 知道从哪里开始抓取。

parse_data 应该是 parse,因为没有任何信息,Scrapy 不知道要调用哪个方法,默认是 parse。否则,当 Scrapy 抓取起始 URL 并且 parse 方法不存在时,您也会收到 NotImplementedError

当我运行下面的代码(其中包含所有提到的更改)并将 response.body 打印到控制台时,我没有找到任何带有 class="odd" 的元素code> 所以我猜站点内有一些 AJAX/XHR 调用,然后提供信息。

编辑

再次查看您的代码后,我发现 XPath 有点奇怪。您使用 tr[@class="odd"]/td/td,但是一个 td 元素没有另一个 td 作为其子元素。如果您想避免 header ,请更改您的提取,如下面的代码所示。通过此更改,我在 salary 列表中得到结果。

import scrapy
from scrapy.crawler import CrawlerProcess

class crawl_income(scrapy.Spider):

    name = "salary"
    allowed_domains = ["stats.mom.gov.sg"]
    start_urls = ['http://stats.mom.gov.sg/Pages/Income-Summary-Table.aspx']

    def parse(self, response):
        print response.body
        table_headers = response.xpath('//tr[@class="odd"]//td')
        salary = []
        for value in table_headers[1:]:
            data = value.xpath('./text()').extract()
            salary.append(data)
        print salary

process = CrawlerProcess()
process.crawl(crawl_income)

process.start()

关于python - 尝试使用scrapy抓取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401160/

相关文章:

python - 查找变量(读或写)

algorithm - 使用一个搜索字符串搜索 4 个网站目录

python - Python3中方法has_key的替换

python - Scrapy CSRF cookie 不被接受并导致 302 重定向

python - 抓取需要 JavaScript 交互的页面

python - 将Python中的字符串作为变量传递给Flask中的render_template()

python - 如何在python 3中更改光标的位置

python - InfluxDB 的查询生成器?

html - 使用 Crawler4j 抓取 PDF

python - 如何从 scrapy 蜘蛛回调中收集统计数据?