如何使用Python抓取“ sorting_1”类中的内容?

时间:2020-08-05 07:48:49

标签: python web-scraping beautifulsoup

我得到了一个制作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'})

2 个答案:

答案 0 :(得分:0)

您可以获取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())

答案 1 :(得分:0)

欢迎您!

查看他们的网站,似乎sorting_X类是由javascript添加的,因此它们不存在于原始html中。

该表确实存在,但是,我建议循环遍历表行,如下所示:

table_rows = soup.find("table", id="main_table_countries_today").find_all("tr")
for row in table_rows:
    
    name = "unknown"
    # Find country name
    for td in row.find_all("td"):
        if td.find("mt_a"): # This kind of link apparently only exists in the "name" column
            name = td.find("a").text

    # Do some more scraping

警告,我有一段时间没有使用汤了,所以这可能不是100%正确的。你明白了。