Парсинг статистики с сайта
Как мне немножко подкорректировать парсинг, чтобы сделать под себя Вот на данный момент у меня такой код:
import requests
from bs4 import BeautifulSoup
def parse():
URL = 'https://news.google.com/covid19/map?hl=ru&gl=RU&ceid=RU:ru'
HEADERS = {
'User-Agent': '' # В коде есть
}
response = requests.get(URL, headers = HEADERS)
soup = BeautifulSoup(response.content, 'html.parser')
items = soup.findAll('div', class_ = 'tZjT9b')
comps = []
for item in items:
comps.append({
'confirmed': item.find('div', class_ = 'fNm5wd qs41qe').get_text(strip = True),
'deaths': item.find('div', class_ = 'fNm5wd gZvxhb').get_text(strip = True),
'recovered': item.find('div', class_ = 'fNm5wd ckqIZ').get_text(strip = True)
})
for comp in comps:
print(comp['confirmed'])
print(comp['deaths'])
print(comp['recovered'])
parse()
При выполнении этого кода я получаю вот такое:
Подтвержденные случаи3 274 747
Выздоровело1 023 911
Умерло233 792
Вопрос первый:
1) Как мне сделать отступы, чтобы не было слитно(хотя у меня strip=True) и сделать числа вот в таком формате: 3.000.000
2) Как мне вывод сделать таким:
Заболевших: 3.274.747
Выздоровевших: 1.023.911
Умерших: 233.792
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Нужно было до конкретного элемента с счетчиком добраться, для простоты кода использовал css-селектор.
Еще, я упростил код, убрав лишние циклы, список и словарь:
import re
import requests
from bs4 import BeautifulSoup
def parse():
URL = 'https://news.google.com/covid19/map?hl=ru&gl=RU&ceid=RU:ru'
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'
}
def _get_num(item) -> str:
return re.sub(r'\s+', '.', item.get_text(strip=True))
response = requests.get(URL, headers=HEADERS)
soup = BeautifulSoup(response.content, 'html.parser')
item = soup.find('div', class_='tZjT9b')
confirmed = _get_num(item.select_one('div.fNm5wd.qs41qe > div.UvMayb'))
deaths = _get_num(item.select_one('div.fNm5wd.ckqIZ > div.UvMayb'))
recovered = _get_num(item.select_one('div.fNm5wd.gZvxhb > div.UvMayb'))
print("Заболевших: ", confirmed)
print("Выздоровевших:", recovered)
print("Умерших: ", deaths)
# Заболевших: 3.276.373
# Выздоровевших: 1.024.529
# Умерших: 233.998
parse()
Автор решения: Wairua
→ Ссылка
Ну на скорую руку чисто ради вывода:
import requests
from bs4 import BeautifulSoup
import re
if __name__ == '__main__':
URL = 'https://news.google.com/covid19/map?hl=ru&gl=RU&ceid=RU:ru'
response = requests.get(URL)
soup = BeautifulSoup(response.content, 'html.parser')
cells = soup.find_all('div', {'class': 'fNm5wd'})
for param in cells:
header = param.find('div', class_='RbBDcc')
value = param.find('div', class_='UvMayb')
print(header.text, re.sub(r'\s+', '.', value.text))
# Подтвержденные случаи 3.276.373
# Выздоровело 1.024.529
# Умерло 233.998