我正在尝试从此页面抓取股票代码:
https://quotes.fidelity.com/mmnet/SymLookup.phtml?reqforlookup=REQUESTFORLOOKUP&productid=mmnet&isLoggedIn=mmnet&rows=50&for=stock&by=cusip&criteria=294100102&submit=Search.
在页面响应中,我看到:
<tr><td height="20" nowrap=""><font class="smallfont">ENZO BIOCHEM ORD SHS</font></td>
<td align="center" width="20%"><font><a href="/webxpress/get_quote?QUOTE_TYPE=&SID_VALUE_ID=ENZ">ENZ</a></font></td>
<td><font> </font></td>
<td><font></font></td></tr>
</tbody></table></td></tr>
我只需要打印ENZ
。
我将如何使用BeautifulSoup做到这一点?另外,还有没有更简单的方法(看起来好像没有API,但是我可能错了)?
到目前为止,这是我的代码:
import requests
from bs4 import BeautifulSoup
base_url = "https://quotes.fidelity.com/mmnet/SymLookup.phtml?reqforlookup=REQUESTFORLOOKUP&productid=mmnet&isLoggedIn=mmnet&rows=50&for=stock&by=cusip&criteria="
cusip = "294100102"
url = base_url + cusip + "&submit=Search"
# Set Soup
headers = {'User-Agent': 'Mozilla/5.0'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
table = soup.find_all("table")[0]
rows = table.find_all("tr")
for row in rows:
company = row.find_all("td", class_="smallfont")
print(company)
答案 0 :(得分:1)
只需使用font a
即可作为CSS选择器。
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://quotes.fidelity.com/mmnet/SymLookup.phtml?reqforlookup=REQUESTFORLOOKUP&productid=mmnet&isLoggedIn=mmnet&rows=50&for=stock&by=cusip&criteria=294100102&submit=Search')
soup = bs(r.content, 'lxml')
print(soup.select_one('font a').text)
另一种看似很健壮的方法是使用带有包含运算符的attribute = value选择器来定位a
标签href
soup.select_one('[href*=SID_VALUE_ID]').text
在尝试访问.text
之前,通常最好将匹配的元素设置为变量并测试None
例如,
var = soup.select_one('[href*=SID_VALUE_ID]')
if var is None:
print('Not found')
else:
print(var.text)