Webscraper не дает правильных результатов с BS4 - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь очистить таблицу живого миллиардера Networth здесь> https://www.bloomberg.com/billionaires/

Это мой код до сих пор. Все, что я получаю, это [] как результат в оболочке python.

Что-то должно быть не так с «findAll», я не думаю, что я использую правильные строки тега.

Пытался использовать просто "найти"

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import csv

#Open page and grab html
my_url = ('https://www.bloomberg.com/billionaires/')
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

#HTML Parser.
page_soup = soup(page_html, 'html.parser')

table = []

#Find table.
ele_table = page_soup.findAll('div',{'class':'dvz-content'})

print(ele_table)

Я ожидаю, что таблица будет распечатана, чтобы я мог получить ее в файл CSV.

1 Ответ

1 голос
/ 01 ноября 2019

Данные загружаются динамически. Вы можете извлечь из тега скрипта, если вы предоставите правильные заголовки. Выражаем необходимую информацию и анализируем библиотеку json. Передайте это пандам, чтобы написать в CSV

from bs4 import BeautifulSoup as bs
import requests, re, json
import pandas as pd

headers = {
    'user-agent': 'Mozilla/5.0',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'if-none-match': 'W/^\\^5dbb59e6-91b10^\\^',
    'if-modified-since': 'Thu, 31 Oct 2019 22:02:14 GMT' # this may be safeguard for caching. Consider if add dynamically.
}

p = re.compile(r'window.top500 = (.*);')
r = requests.get('https://www.bloomberg.com/billionaires/', headers = headers)
data = json.loads(p.findall(r.text)[0])
df = pd.DataFrame(data)
df.to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8-sig',index = False)

Пример вывода:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...