#python #beautifulsoup #lxml
#python #beautifulsoup #lxml
Вопрос:
Я пытаюсь загрузить данные с веб-сайта, все работает нормально, за исключением случаев, когда он сталкивается с датами, он просто возвращает «». Я просмотрел HTML, загруженный в программу, и в нем ничего нет между тегами, поэтому он ничего не возвращает. Когда вы просматриваете html онлайн, вы можете четко видеть его там. У кого-нибудь есть какие-либо идеи?
from bs4 import BeautifulSoup
import requests
stocks=["3PL"]
keys = list()
values = list()
for stock in stocks:
source = requests.get(r"https://www.reuters.com/companies/" stock ".AX/key-metrics").text
soup = BeautifulSoup(source, 'lxml')
for data in soup.find_all("tr", class_="data"):
keys.append(data.th.text)
if data.td.text != "--":
values.append(data.td.text)
else:
values.append("nan")
print(keys[3])
print(values[3]) #This should return the date
Комментарии:
1. Кажется, что данные, которые вы ищете, просто отсутствуют при загрузке страницы с запросами. Возможно, вы захотите попробовать это с помощью реального браузера и selenium
Ответ №1:
Казалось бы, ваши данные добавлены с помощью javascript. Это то, что запросы не будут обрабатывать, поскольку это не будет отображать страницу как обычные браузеры. Извлекайте только необработанные данные.
Однако вы можете использовать selenium
пакет, чтобы сделать это успешно. Чтобы установить это:
pip install selenium
Возможно, вам потребуется настроить некоторые веб-драйверы для использования Firefox или Chrome. Но в приведенном ниже случае я использовал браузер, который работал из коробки, будучи Safari.
Я немного скорректировал ваш код, чтобы использовать пакет selenium, и поместил ваши данные в dict, чтобы сохранить лучшую согласованность.
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
stocks=["3PL"]
response_data = {}
driver = webdriver.Safari()
for stock in stocks:
url = r"https://www.reuters.com/companies/" stock ".AX/key-metrics"
driver.get(url)
source = driver.page_source
soup = BeautifulSoup(source)
for data in soup.find_all("tr", class_="data"):
if data.td.text != "--":
response_data[data.th.text] = data.td.text
else:
response_data[data.th.text] = 'nan'
driver.close()
Теперь вы можете проверить, правильно ли загружены данные:
print(response_data['Pricing date'])
Sep-04