Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用scrapy抓取值_Python_Web Crawler_Scrapy - Fatal编程技术网

Python 尝试使用scrapy抓取值

Python 尝试使用scrapy抓取值,python,web-crawler,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): tab

我正试图使用以下代码从网页中获取“每月工作总收入中位数”:

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\u url
以便让Scrapy知道从哪里开始爬网

parse_data
应该是
parse
,因为没有任何信息,Scrapy不知道调用哪个方法,默认值是
parse
。否则,当Scrapy对开始URL进行爬网并且
parse
方法不存在时,也会出现
NotImplementedError

当我运行下面的代码(包含所有提到的更改)并将
response.body
打印到控制台时,我找不到任何带有
class=“odd”
的元素,因此我猜站点内部有一些AJAX/XHR调用,这些调用随后提供了信息

编辑

再次查看代码后,我发现XPath有点奇怪。您使用
tr[@class=“odd”]/td/td
但是一个
td
元素没有另一个
td
作为其子元素。如果要避免标题,请按照下面的代码更改提取。通过此更改,我将在
薪资
列表中获得结果

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()

不管是开始url还是url,也不管是解析还是解析数据,它都适用于我的另一个爬虫程序。好的,我再次查看了代码和站点,并更新了示例。但是对我来说,它只适用于
开始\u URL
。您是否正确缩进了代码,使parse方法位于类的主体中,而不是作为全局方法?谢谢!它工作得很好!你知道我怎么能同时做多个爬虫吗?如果可以的话,我希望你能接受这个答案。对于多个爬虫,只需使用爬行器类多次调用
process.crawl
。有什么例子吗?在一个类中,我想运行多个spider。