我正在尝试通过网络收集一些不同ETF的每日信息。我发现https://www.marketwatch.com/有准确的信息。最相关的信息是ETF的公开价格,流通股,资产净值,总资产。这是IVV美国股票的链接:https://www.marketwatch.com/investing/fund/ivv
我才刚刚开始获得Python经验,想获得一些有关如何启动Web抓取程序的提示和准则。有人告诉我BeutifulSoup是用于网络抓取的软件包。
我以前用VBA抓取过Web,但是我使用的页面的HTML不同,我不知道这是否是因为ETF的某些值(例如价格和交易量)不断变化。
我愿意接受任何建议或任何其他有用的网站(我曾与Yahoo Finance和Morningstar进行过尝试,但HTML代码也遇到了同样的问题)。
答案 0 :(得分:0)
是的,我同意“美丽汤”是一种很好的方法。这是一些Python代码,它使用Beautiful Soup库从IVV基金页面中提取日内价格:
import requests
from bs4 import BeautifulSoup
r = requests.get("https://www.marketwatch.com/investing/fund/ivv")
html = r.text
soup = BeautifulSoup(html, "html.parser")
if soup.h1.string == "Pardon Our Interruption...":
print("They detected we are a bot. We hit a captcha.")
else:
price = soup.find("h3", class_="intraday__price").find("bg-quote").string
print(price)
价格经常变动的事实不是问题。 HTML标签的名称和类别将保持不变。这就是工作美丽汤所需要的。
您的主要挑战是该网站能够检测到您没有使用Internet浏览器,并且会显示您的Python脚本的验证码。因此,您将需要找到一种解决方法。另外,我建议您检查抓取的合法性以及是否违反了他们的服务条款。
您可以在此处了解有关“美丽汤”的更多信息:
答案 1 :(得分:0)
如果您使用软件包investpy,则不必使用网络抓取来获取所需的数据。 investpy允许您获取每日ETF数据。它还可以帮助您通过ISIN(国际证券识别码)找到ETF:
investpy.search_etfs(by="isin", value="my_isin")
这就是获取数据的方式:
investpy.get_etf_recent_data(etf=etf_name, country="my_country")