python - 从python中的给定url中抓取两列
问题描述
我必须从趋势代码中抓取数据 - 雅虎和我必须只从表中获取公司的符号和名称,我已经为整个表编写了代码,但我怎样才能获得所需的列?
我的代码是:
import requests
from bs4 import BeautifulSoup
import pandas
url = 'https://finance.yahoo.com/trending-tickers'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
table = soup.find("table",{"class":"yfinlist-table W(100%) BdB Bdc($tableBorderGray)"})
tableRows = [[td.text for td in row.find_all("td")] for row in table.find_all("tr")[1:]]
tableHeaders = [th.text for th in table.find_all("th")]
df = pandas.DataFrame(tableRows,columns = tableHeaders)
print(df)
解决方案
你已经正确地刮掉了所有的行。但是,要仅获取符号和名称,您必须逐行循环并在每次迭代中获取它们。如果您右键单击并检查任何符号,您可以看到文本位于<a>
标签内。对应的<a>
标签格式如下:
<a href="/quote/S?p=S" title="Sprint Corporation" data-symbol="S" class="Fw(b)" data-reactid="57">S</a>
如您所见,名称包含在带有title
属性的标签中。因此,要同时获取符号和名称,您只需获取标签即可。由于它是一行中的第一个 <a>
标签,您可以简单地使用row.find('a')
.
完整代码:
import requests
from bs4 import BeautifulSoup
r = requests.get('https://finance.yahoo.com/trending-tickers')
soup = BeautifulSoup(r.text, 'lxml')
table = soup.find('table', class_='yfinlist-table W(100%) BdB Bdc($tableBorderGray)')
for row in table.find_all('tr')[1:]:
a_tag = row.find('a')
symbol = a_tag.text
name = a_tag['title']
print(symbol, name)
输出:
S Sprint Corporation
TMUS T-Mobile US, Inc.
AAPL Apple Inc.
^HSI HANG SENG INDEX
^N225 Nikkei 225
000001.SS SSE Composite Index
WMT Walmart Inc.
NKE NIKE, Inc.
^FTSE FTSE 100
^AORD ALL ORDINARIES
BTC-USD Bitcoin USD
CL=F Crude Oil
MCD McDonald's Corporation
AUDUSD=X AUD/USD
KO The Coca-Cola Company
DIS The Walt Disney Company
GBPUSD=X GBP/USD
GERN Geron Corporation
^NSEI NIFTY 50
TSLA Tesla, Inc.
VZ Verizon Communications Inc.
EURUSD=X EUR/USD
^BSESN S&P BSE SENSEX
GC=F Gold
0700.HK Tencent Holdings Limited
^KS11 KOSPI Composite Index
推荐阅读
- laravel - Laravel Eloquent 带有 'with' 和 'wherehas'
- python - 字符串>>>>>>>>“在发送电子邮件时搞砸了
- xamarin - TextCell 中的 TapGestureRecognizer 绑定到 ViewModel 命令
- javascript - 在 TypeScript 中,函数表达式和箭头表达式初始化的变量中是否有 `this`?
- c# - 对类似 Count() 的方法的连续调用是否会重新枚举 IEnumerable
? - uwp - 如何在 UWP 中删除奇怪的视图框间距?
- python - 使用 read() 方法从 Amazon S3 读取大量 JSON 文件时出现 MemoryError
- python - 安装 conda-forge mlxtend - 安装 mlxtend 时出错 - 权限被拒绝
- javascript - Ember:没有找到“用户”的模型,并且在执行保存承诺时创建了重复的 POST
- javascript - 下载文件后删除链接