提问者:小点点

我如何用Python刮取'sorting_1'类内部的内容?


我接到了一个制作covid追踪器的项目。我决定在该站点(https://www.worldometers.info/coronavirus/)中添加一些元素。我对python很陌生,所以决定用BeautifulSoup。我能够刮出基本元素,比如总案例,活动案例等等。然而,每当我试图获取国家名称或数字时,它返回一个空列表。即使存在一个类'sorting_1',它仍然返回一个空列表。有人能指引我哪里错了吗?

这是我想要抓住的东西:

<td style="font-weight: bold; text-align:right" class="sorting_1">4,918,420</td>

下面是我当前的代码:

import requests
import bs4

#making a request and a soup
res = requests.get('https://www.worldometers.info/coronavirus/')
soup = bs4.BeautifulSoup(res.text, 'lxml')

#scraping starts here
total_cases = soup.select('.maincounter-number')[0].text
total_deaths = soup.select('.maincounter-number')[1].text
total_recovered = soup.select('.maincounter-number')[2].text

active_cases = soup.select('.number-table-main')[0].text

country_cases = soup.find_all('td', {'class': 'sorting_1'})

共1个答案

匿名用户

您可以获得sorting_1类,因为它不存在于页面源中。您已经找到表中的所有行,然后从所需列中读取信息。

因此,要获得每个国家/地区的总案例,可以使用以下代码:

import requests
import bs4

res = requests.get('https://www.worldometers.info/coronavirus/')
soup = bs4.BeautifulSoup(res.text, 'lxml')

country_cases = soup.find_all('td', {'class': 'sorting_1'})
rows = soup.select('table#main_table_countries_today tr')
for row in rows[8:18]:
    tds = row.find_all('td')
    print(tds[1].text.strip(), '=',  tds[2].text.strip())