首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scrapy抓取特定的h1标记

使用scrapy抓取特定的h1标记
EN

Stack Overflow用户
提问于 2021-03-23 02:50:04
回答 2查看 86关注 0票数 0

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

我想我已经能够正确地设置scrapy了,当我在scrapy shell中写"view(response)“时,我正确地得到了整个网站,但是不管我用xpath写了什么,我都不能得到这个数字。

该数字在h1标记内:

代码语言:javascript
复制
<h1 class="pl-2 mt-4 font-weight-light">7.894.659</h1>

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

要获得这个数字,正确的语法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-23 03:54:37

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

下面是我想要实现的方法:

代码语言:javascript
复制
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}

输出:

代码语言:javascript
复制
{'Total': 7894659}
票数 1
EN

Stack Overflow用户

发布于 2021-03-24 23:01:16

当你在scrapy shell中加载一个网页时,它加载时没有javascript。当你使用javascript view(response)时,它会加载到浏览器中。在浏览器中禁用js,你会看到网站没有加载。你需要Splash在scrapy shell中加载js网站。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66752145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档