Python 使用 Selenium 和 Beautiful Soup 抓取 JavaScript

Posted

技术标签:

【中文标题】Python 使用 Selenium 和 Beautiful Soup 抓取 JavaScript【英文标题】:Python Scraping JavaScript using Selenium and Beautiful Soup 【发布时间】:2013-01-09 21:23:58 【问题描述】:

我正在尝试使用 BS 和 Selenium 抓取启用 javascript 的页面。 到目前为止,我有以下代码。它仍然无法以某种方式检测到 JavaScript(并返回空值)。在这种情况下,我试图在底部刮掉 Facebook cmets。 (检查元素将类显示为 postText) 感谢您的帮助!

from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys  
import BeautifulSoup

browser = webdriver.Firefox()  
browser.get('http://techcrunch.com/2012/05/15/facebook-lightbox/')  
html_source = browser.page_source  
browser.quit()

soup = BeautifulSoup.BeautifulSoup(html_source)  
comments = soup("div", "class":"postText")  
print comments

【问题讨论】:

您可能想尝试在页面上设置等待 - 您可能会在页面有时间完全加载之前退出(请记住,这就像浏览器并经历延迟)。在你的情况下,你可以通过等待一段时间来解决它,但更优雅的解决方案可以在seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits 我不太确定等待是否是问题所在,因为我删除了 browser.quit() 并运行了程序。没有运气。 问题实际上是之前的那一行——它在加载任何源之前加载page_source :) 【参考方案1】:

您的代码中存在一些错误,已在下面修复。但是,“postText”类必须存在于其他地方,因为它没有在原始源代码中定义。 我的修改后的代码版本已经过测试,可以在多个网站上运行。

from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys  
from bs4 import BeautifulSoup

browser = webdriver.Firefox()  
browser.get('http://techcrunch.com/2012/05/15/facebook-lightbox/')  
html_source = browser.page_source  
browser.quit()

soup = BeautifulSoup(html_source,'html.parser')  
#class "postText" is not defined in the source code
comments = soup.findAll('div','class':'postText')  
print comments

【讨论】:

谢谢。这真的帮我节省了很多时间。

以上是关于Python 使用 Selenium 和 Beautiful Soup 抓取 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

使用 selenium 和 python 检查是不是存在任何警报

Selenium 窗口滚动仅适用于使用 Selenium 和 Python 识别 Select 元素的调试模式

Python Selenium 无法使用 Selenium 和 Python 在#shadow-root (open) 中通过 xpath 找到元素

使用 Selenium 和 python 为 Instagram 提供上传文件路径

使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?

无法使用 Selenium 和 Python 访问下拉菜单