使用 scrapy 抓取特定的 h1 标签

Scraping a specific h1 tag with scrapy

我是第一次使用scrapy,我一直在尝试从意大利政府的网站上抓取接种疫苗的数量 https://www.governo.it/it/cscovid19/report-vaccini/ (中间大数)

我想我已经能够正确设置 scrapy,当我在 scrapy shell“view(response)”中写入时,我正确地获得了整个网站,但无论我用 xpath 写了什么我无法获取号码。

数字在 h1 标签内:

<h1 class="pl-2 mt-4 font-weight-light">7.894.659</h1>

但是当我尝试过滤结果时,我得到的只是空响应[]

获取此数字的正确语法是什么?

您要查找的号码在该网页的页面源(Ctrl + U)中不可用。但是,您可以尝试添加位于该页面中的数字,如下图所示,以获得所需的结果。

以下是我实现该目标的方式:

import json
import scrapy

class GovernoSpider(scrapy.Spider):
    name = "reportvaccini"

    start_url = "https://raw.githubusercontent.com/italia/covid19-opendata-vaccini/master/dati/vaccini-summary-latest.json"
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
    }

    def start_requests(self):
        yield scrapy.Request(self.start_url, callback=self.parse, headers=self.headers)

    def parse(self, response):
        num = 0
        json_content = json.loads(response.text)
        for item in json_content['data']:
            num+=int(item['dosi_somministrate'])
            
        yield {"Total": num}

输出:

{'Total': 7894659}

当您在 scrapy shell 中加载网页时,它会在没有 javascript 的情况下加载。当您 view(response) 时,它会在浏览器中加载 javascript。在浏览器中禁用 js,您将看到网站无法加载。 你需要 Splash 才能在 scrapy 中加载 js 网站 shell.