我是第一次使用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>但是,当我尝试过滤结果时,得到的结果都是空的响应[]
要获得这个数字,正确的语法是什么?
发布于 2021-03-23 03:54:37
您要查找的号码在该网页的页面源(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}发布于 2021-03-24 23:01:16
当你在scrapy shell中加载一个网页时,它加载时没有javascript。当你使用javascript view(response)时,它会加载到浏览器中。在浏览器中禁用js,你会看到网站没有加载。你需要Splash在scrapy shell中加载js网站。
https://stackoverflow.com/questions/66752145
复制相似问题