gpt4 book ai didi

python - 尝试使用scrapy抓取值

转载 作者:行者123 更新时间:2023-11-30 23:09:05 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com