使用 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.
我是第一次使用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.