#python #beautifulsoup #scrape
Вопрос:
Я пытаюсь наскрести финвиза(https://finviz.com/quote.ashx?t=aapl) для рыночной цены в фундаментальной таблице, но я ни за что на свете не смог бы найти стол или класс с красивым супом. Кажется, что каждый раз, когда я использую soup.find_all (), Он работает для «div», «td», «таблицы» и т. Д., Но он возвращает пустой список, когда я пытаюсь добавить класс, например {«класс»: «снимок-td2»}. Кто-нибудь знает, как я могу это исправить?
import requests
from bs4 import BeautifulSoup
import bs4
def parseMarketCap():
response = requests.get("https://finviz.com/quote.ashx?t=aapl")
soup = bs4.BeautifulSoup(response.content, "lxml")
table = soup.find_all('td', {'class':'snapshot-td2'})
print(table)
Я также попробовал следующее для таблицы, но тоже безуспешно:
table = soup.find_all('table', {'class': "snapshot-table2"})
Ответ №1:
как QHarr, предлагаю вам добавить user-agent
для правильного ответа
response = requests.get("https://finviz.com/quote.ashx?t=aapl",headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'})
soup = BeautifulSoup(response.text, "lxml")
content_table = soup.find('table', {'class':'snapshot-table2'})
tabel_rows = content_table.find_all('tr')
market_cap = tabel_rows[1].find_all('td')[1].text
print(market_cap)
Ответ №2:
Попробуйте использовать User-Agent для вашего запроса следующим образом:
user_agent = {'User Agent':'YOUR_USER_AGENT'}
r = requests.get('YOURURL', headers=user_agent)
...
Ответ №3:
Вам нужен заголовок агента пользователя, который вы можете использовать -soup-contains:
для таргетинга на предыдущий td
по его тексту, а затем перейти к нужному полю значения:
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://finviz.com/quote.ashx?t=aapl', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')
print(soup.select_one('td:-soup-contains("Market Cap")').find_next('b').text)