无法为scrapy xpath生成输出

v09wglhw  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(154)

我是一个绝对的新手在scrapy和python,这是我第一次问一个StackOverflow问题,所以请耐心等待我在这里,
我试图从一个网站的表中提取数据,它包含在一个<span>标签中。当我使用scrapy shell时,我成功地获得了正确的输出(COVID-19形势报告摘要表的值),但我无法将输出复制到json/csv文件中。我尝试了常规的start_urls(第8行),但面临着输出为空的问题。
这是我当前的代码,它也给了我一个空白的json输出/文件,没有任何错误

import scrapy

class Covid19spider(scrapy.Spider):
    name = "covid19summary"  # name of spider

    def parse(self,response):
        self.start_urls = 'https://www.moh.gov.sg/covid-19/statistics' #url of the website to crawl

        all_data = response.xpath("//td")
        for data in all_data:
            indiv_data = response.xpath("//td/span[1]/text()").extract()
            # print(indiv_data)
            yield {
                'cases': response.xpath("//td/span[1]/text()").extract() 
            }

会感激一些帮助在这方面!提前感谢!

uoifb46i

uoifb46i1#

使用报废:

import scrapy

class Covid19spider(scrapy.Spider):
    name = "covid19summary"  # name of spider
    start_urls = ['https://www.moh.gov.sg/covid-19/statistics'] #url of the website to crawl

    def parse(self,response):
        all_data = response.xpath("//td")
        for data in all_data:
            indiv_data = response.xpath("//td/span[1]/text()").extract()
            # print(indiv_data)
            yield {
            'cases': response.xpath("//td/span[1]/text()").extract() 
            }

这个很好用试试这个

import scrapy

class Covid19spider(scrapy.Spider):
    name = "covid19summary"  # name of spider
    start_urls = ['https://www.moh.gov.sg/covid-19/statistics'] #url of the website to crawl

    def parse(self,response):
        tb_data = response.css("td span::text").extract()
        yield {'data' : tb_data}

请注意,这个页面没有给予第一个表的“日期”标题,而只给出了那些元素的内部文本,这些文本在td标签中有一个span标签。所以我建议你阅读CSS选择器的概念。
日期标题源代码:

<td height="20" width="64">
    <span style="font-family: Arial; font-size: 16px;">
    <strong>Date</strong>
    </span>
</td>

其他标题:

<td width="64" style="text-align: right;">
    <strong>
    <span style="font-family: Arial; font-size: 16px;">Imported</span>
    </strong>
</td>

我的代码给予了td标记内的span标记的文本部分,

相关问题