使用 urllib 进行网页抓取
Posted
技术标签:
【中文标题】使用 urllib 进行网页抓取【英文标题】:Webscraping with urllib 【发布时间】:2018-02-06 18:44:50 【问题描述】:我希望从CME website 获得一些信息 即我想获得 10 年期国库券期货的期货收益率和期货 DV01。 在旧的thread 上发现了这个小 sn-p:
import urllib.request
class AppURLopener(urllib.request.FancyURLopener):
version = "Mozilla/5.0"
opener = AppURLopener()
fh = opener.open('http://www.cmegroup.com/tools-information/quikstrike/treasury-analytics.html')
它会发出弃用警告,我不太确定如何从网站获取信息。有人可以告诉我新语法应该是什么以及如何获取信息。谢谢
【问题讨论】:
你的电脑上安装了 selenium 吗?如果是,请告诉我。要获得您要查找的数据,需要跨越两个障碍。首先,该网页启用了 javascript,其次有一个“iframe”,您需要切换它来收集数据。您需要使用 selenium 来崩溃。 如果这是我需要的,我当然可以安装它。 您可以做的一件事是从提供商处购买数据。这可能是最好和最直接的做事方式。创建这些数字需要花费大量工时。如果您想知道如何做到这一点,请随时发表评论。仅供参考 - 我们将在下一个版本中与刮擦作斗争。谢谢! 值得注意的是,我在您的服务条款或规则手册中没有发现任何反对抓取的内容,虽然您可以从技术角度解决这个问题,但这通常是一个有争议的问题,因为持久的消费者可能会雇用手动刮(复制/粘贴)的廉价劳动力,绕过所有机器人检测甚至验证码。如果这是一个大问题,您应该与您的法律部门联系,并在您的服务条款中明确添加。这将使您能够采取法律行动以及技术措施。 嗨@尼克霍华德。如果我能以其他方式获得 TY 的 DV01,那确实很酷。理想情况下,需要通过一些 API 获取每日数据。由于这不是火箭科学,我当然也可以自己计算。 【参考方案1】:安装完 selenium 后运行脚本。
from selenium import webdriver ; from bs4 import BeautifulSoup
driver = webdriver.Chrome()
driver.get("http://www.cmegroup.com/tools-information/quikstrike/treasury-analytics.html")
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
table = soup.select('table.grid')[0]
list_of_rows = [[t_data.text for t_data in item.select('th,td')]
for item in table.select('tr')]
for data in list_of_rows:
print(data)
我想,这就是你要的桌子[部分图片]:
【讨论】:
效果很好。我正在使用 Safari。非常感谢。 如何选择不同的页面(通过“合同”按钮,从那里检索数据?我试过这个,还有很多,但没有运气;elements = driver.find_elements_by_xpath("// ul[@class='nav']") 要访问不同合约的数据,以下会选择节点,但我不知道足够的 Selenium 来确定如何选择和加载它们: driver.get("cmegroup-tools.quikstrike.net/User/…) 元素= driver.find_elements_by_xpath("//div[@class='group']")以上是关于使用 urllib 进行网页抓取的主要内容,如果未能解决你的问题,请参考以下文章
Python 使用 urllib2 抓取网页 Http 错误 500