是否可以用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 抓取“动态网页”?的主要内容,如果未能解决你的问题,请参考以下文章

使用BeautifulSoup抓取aspx网站

python3用BeautifulSoup抓取div标签

python3用BeautifulSoup用字典的方法抓取a标签内的数据

python3用BeautifulSoup用re.compile来匹配需要抓取的href地址

用 BeautifulSoup 抓取后提取单词

python3用BeautifulSoup抓取id='xiaodeng',且正则包含‘elsie’的标签