1

例如,我正在尝试抓取 PubChem 上的文章,例如这篇文章。PubChem 要求浏览器启用 Javascript,否则它会重定向到几乎没有内容显示“此应用程序需要 Javascript。请打开 Javascript 以使用此应用程序”的页面。为了解决这个问题,我使用 Selenium 库中的 Chrome Web 驱动程序来获取 PubChem 使用 JavaScript 生成的 HTML。

它大约有一半的时间这样做。它还经常不呈现完整的 html,并重定向到 Javascript 警告页面。如何使脚本始终如一地检索网站的 JS 版本?

我也尝试通过使用 PhantomJS 来解决这个问题,除了 PhantomJS 在安装后不知何故无法在我的机器上运行。

from bs4 import BeautifulSoup
from requests import get
from requests_html import HTMLSession
from selenium import webdriver
import html5lib

session = HTMLSession()
browser = webdriver.Chrome('/Users/user/Documents/chromedriver')
url = "https://pubchem.ncbi.nlm.nih.gov/compound/"
browser.get(url)
innerHTML = browser.execute_script("return document.body.innerHTML")
soup = BeautifulSoup(innerHTML, "html5lib")

没有任何错误消息。唯一的问题是,有时网络爬虫无法按预期获取 JS 渲染的网页。太感谢了!

4

1 回答 1

0

回答我自己的问题,因为为什么不呢。

您需要通过以下方式退出浏览器

browser = webdriver.Chrome('/Users/user/Documents/chromedriver')
# stuff
browser.quit()

并在涉及浏览器的最后一次操作之后立即执行此操作,因为浏览器缓存可能会影响您在运行脚本的下一次迭代中的输出。

希望有这个问题的人觉得这有帮助!

更新编辑:

所以关闭浏览器确实会增加成功的频率,但不会使其保持一致。另一件有助于使其更频繁地工作的事情是运行

sudo purge

在终端。但是,我仍然没有得到一致的结果。如果有人知道如何在不使用蛮力的情况下做到这一点(即打开和关闭 WebDriver 直到它呈现正确的页面),请告诉我!非常感谢

于 2019-09-10T15:44:56.457 回答