是否可以用beautifulsoup 抓取“动态网页”?
Posted
技术标签:
【中文标题】是否可以用beautifulsoup 抓取“动态网页”?【英文标题】:Is it possible to scrape a "dynamical webpage" with beautifulsoup? 【发布时间】:2017-04-05 14:23:48 【问题描述】:我现在开始使用beautifulsoup来抓取网站,虽然我对网页缺乏理论知识,但我想我已经掌握了基础知识,我会尽力提出我的问题。
我对动态网页的意思如下:一个网站,其 html 会根据用户操作发生变化,在我的例子中是可折叠表格。
我想获取一些“div”标签内的数据,但是当你加载页面时,数据在 html 代码中似乎不可用,当你点击它展开的表格时,以及这个“div”的“类”从“某事 blabla collapsible”变为“某事 blabla collapsible active”之类的变化,这我可以用我的知识刮掉。
我可以使用 beautifulsoup 获取这些数据吗?万一我做不到,我想用selenium之类的东西来点击所有的表格,然后下载我可以抓取的html,有没有更简单的方法?
非常感谢。
【问题讨论】:
Selenium 可能是您最好的选择,然后使用driver.page_source
获取 HTML。如果您需要更具体的建议,查看一些代码会很有帮助。
问题是页面使用javascript/AJAX
加载数据。如果您知道 JavaScript/AJAX
使用哪个 url 来获取数据,那么您也可以使用 urllib/requests
来获取此数据。您可以在Chrome/Firefox
中使用DevTools
手动查找此url,然后您可以在Python 代码中使用它。但是你必须知道 HTTP、DevTools,有时还有 JavaScript、XPath 等。顺便说一句:关闭浏览器中的 JavaScript 并加载页面,你会看到 urllib/requests(和 BS)看到的内容。
Scrape a series of tables with BeautifulSoup的可能重复
【参考方案1】:
这取决于。如果页面加载时数据已经加载,那么数据可以被抓取,它只是在不同的元素中,或者被隐藏。如果点击事件以某种方式触发数据加载,那么不,您将需要 Selenium 或其他无头浏览器来自动执行此操作。
Beautiful soup只是一个 HTML 解析器,因此无论您通过请求页面获得的任何数据都是 beautiful soup 可以访问的唯一数据。
【讨论】:
以上是关于是否可以用beautifulsoup 抓取“动态网页”?的主要内容,如果未能解决你的问题,请参考以下文章