作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用以下代码从网页中抓取“每月总收入中位数”:
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/
我是一名优秀的程序员,十分优秀!