marketcap基础数据的网络抓取finviz

2024-05-16 01:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在基本表中从finviz(https://finviz.com/quote.ashx?t=aapl)中找出marketcap,但我一生都找不到这个表或这个有漂亮汤的类。似乎每次我使用soup.find_all()时,它都适用于'div'、'td'、'table'等。但当我尝试添加类似{'class':'snapshot-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"})

inspect

fundamental table


Tags: httpsimportcomtablesnapshotallfindclass
3条回答

正如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)

尝试对您的请求使用用户代理,如下所示:

user_agent = {'User Agent':'YOUR_USER_AGENT'}
r = requests.get('YOURURL', headers=user_agent)
...

您需要一个用户代理头,然后可以使用-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)

相关问题 更多 >