繁体   English   中英

Python - 如何使用网站上的抓取表以及可用行的下拉列表

[英]Python - How to use scrape table from website with dropdown of available rows

我正在尝试从 zacks.com 和 url 表中抓取收益日历数据。

https://www.zacks.com/stock/research/aapl/earnings-calendar

问题是我正在尝试从表中抓取所有数据,但它有一个下拉列表到 select 页面上的 10、25、50 和 100 行。 理想情况下,我想抓取所有 100 行,但是当我从下拉列表中选择 select 100 时,url 不会改变。 我的代码如下。

要注意该网站阻止了用户代理,因此我不得不使用 chrome 驱动程序来模拟访问 web 的人。 从 pd.read_html 获得的结果是所有表的列表,并且 d[4] 返回只有 10 行的收益日历(我想将其更改为 100)

driver = webdriver.Chrome('../files/chromedriver96')
symbol = 'AAPL'
url = 'https://www.zacks.com/stock/research/{}/earnings-calendar'.format(symbol)
driver.get(url)
content = driver.page_source
d = pd.read_html(content)
d[4]

所以打电话给任何人来指导我

谢谢!


更新:看起来我的上一篇文章由于缺乏清晰的表达和展示过去研究的证据而被降级。 也许我仍然是在这个网站上发布问题的新手。 实际上,我发现了几个页面,包括这个页面有同样的问题,但解决方案似乎对我不起作用,这就是为什么我来发布这个作为一个新问题

看了看,这不会是容易刮的东西。 鉴于该表是从 javascript 生成的,我想说您有两个选择。

选项一:

使用 selenium 渲染页面,允许 javascript 运行。 这样,您可以简单地使用下拉列表的 id/class 与之交互。 然后,您可以通过查看表中的值来抓取数据。

选项二:

这是更具挑战性的一个。 查看页面响应的数据,并尝试查找导致您随后在页面上看到的数据的请求。 通过交叉引用这些,将有一种方法可以直接请求您想要的数据。 您可能会发现,要获取您想要的数据,您需要接受从原始请求到页面的密钥,然后将该密钥作为第二个请求的一部分发送。 这种方式应该允许您抓取数据,而无需运行 selenium 实例,该实例将更有效地运行。

我个人的建议是使用选项一的 go,因为计算机资源便宜且开发人员时间昂贵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM