目标是让 Python / BeautifulSoup 抓取雅虎财经和上市公司所有者的名字/姓氏:
from bs4 import BeautifulSoup
import requests
url = 'https://finance.yahoo.com/quote/GTVI/profile?p=GTVI'
page = requests.get(url, headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
})
soup = BeautifulSoup(page.text, 'html.parser')
price = soup.find_all("tr", {"class": "C($primaryColor) BdB Bdc($seperatorColor) H(36px)"})
print(soup.select_one("td > span").text)
^-上面的单个调用完美地工作,但我无法让它循环并多次打印以保持用户代理浏览器的屏蔽。这是我的尝试(Python 新手请记住)Haaalp :)
from bs4 import BeautifulSoup
import requests
url = ['https://finance.yahoo.com/quote/GTVI/profile?p=GTVI',
'https://finance.yahoo.com/quote/RAFA/profile?p=RAFA',
'https://finance.yahoo.com/quote/CYDX/profile?p=CYDX',
'https://finance.yahoo.com/quote/TTHG/profile?p=TTHG']
names = []
for link in url:
w=1
reqs2 = requests.get(link)
page = requests.get(url, headers={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
})
soup = BeautifulSoup(page.text, 'html.parser')
for x in soup.find_all("tr", {"class": "C($primaryColor) BdB Bdc($seperatorColor) H(36px)"})
names.append(x.text)
print(names)(soup.select_one("td > span").text)
当然,以下是如何使用 Python 和 BeautifulSoup 从雅虎财经的多个网页上抓取高管姓名和职务的方法:
from bs4 import BeautifulSoup
import requests
urls = [
'https://finance.yahoo.com/quote/GTVI/profile?p=GTVI',
'https://finance.yahoo.com/quote/RAFA/profile?p=RAFA',
'https://finance.yahoo.com/quote/CYDX/profile?p=CYDX',
'https://finance.yahoo.com/quote/TTHG/profile?p=TTHG'
]
names = []
for url in urls:
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
executives = soup.find_all("tr", {"class": "C($primaryColor) BdB Bdc($seperatorColor) H(36px)"})
for executive in executives:
name_element = executive.find("td", {"class": "Ta(start)"}).find("span")
name = name_element.text.strip() if name_element else "N/A"
names.append(name)
print(names)
解释:
-
循环遍历 URL:
代码遍历
urls
列表中的每个 URL。 - 为每个 URL 发出请求: 在循环内,它会向给定的 URL 发送一个请求,包括一个用户代理标头来模拟一个浏览器。
- 解析 HTML: 它使用 BeautifulSoup 解析下载的 HTML 内容。
-
查找包含高管信息的元素:
它使用
find_all()
方法搜索与指定类匹配的<tr>
元素。这些行包含高管的详细信息。 -
提取姓名:
在每个找到的行中,它会找到包含姓名(在
<td>
标签内,类为Ta(start)
)的<td>
元素。然后,它会提取文本内容。 -
追加到列表:
提取到的姓名将被追加到
names
列表中。 - 打印姓名: 循环完成后,它会打印收集到的姓名列表。
此代码将遍历每个 URL,查找包含高管姓名的特定 HTML 结构,提取姓名,并将它们存储在
names
列表中以供进一步处理或输出。
请注意: 网站结构可能会发生变化。如果雅虎财经的布局发生变化,则此代码可能需要调整以匹配新的结构。
标签:python,web-scraping,finance,yahoo From: 74140849