抓取动态网页(如何利用Webkit从JS渲染网页中获取数据处理的任何事情)

优采云 发布时间: 2022-01-24 14:13

  抓取动态网页(如何利用Webkit从JS渲染网页中获取数据处理的任何事情)

  当我们进行网络爬取时,我们会使用一定的规则从返回的 HTML 数据中提取有效信息。但是如果网页收录 JavaScript 代码,我们必须渲染它以获取原创数据。在这一点上,如果我们仍然以通常的方式从中抓取数据,我们将一无所获。浏览器知道如何处理这段代码并显示出来,但是我们的程序应该如何处理这段代码呢?接下来,我将介绍一种简单粗暴的方法来抓取收录 JavaScript 代码的网页信息。

  大多数人使用 lxml 和 BeautifulSoup 包来提取数据。本文不会涉及任何爬虫框架,因为我只使用最基本的lxml包来处理数据。你可能想知道为什么我更喜欢 lxml。那是因为 lxml 使用元素遍历来处理数据,而不是像 BeautifulSoup 那样使用正则表达式来提取数据。在这篇文章中我要介绍一个非常有趣的案例——突然发现我的文章出现在最近的Pycoders周刊147上,所以我想爬取Pycoders周刊中所有档案的链接。

  

  显然,这是一个带有 JavaScript 渲染的网页。我想抓取网页中的所有*敏*感*词*信息和相应的链接信息。那么我该怎么办呢?首先,我们无法通过 HTTP 方法获取任何信息。

  导入请求

  从 lxml 导入 html

  # 存储响应

  响应 = requests.get('#x27;)

  # 从响应体创建 lxml 树

  树 = html.fromstring(response.text)

  # 查找所有的锚标签作为响应

  print tree.xpath('//div[@class="campaign"]/a/@href')

  当我们运行上述代码时,我们无法获得任何信息。这怎么可能?网页清楚地显示了这么多文件的信息。接下来我们需要考虑如何解决这个问题?

  如何获取内容信息?

  接下来我将展示如何使用 Web 工具包从 JS 渲染的网页中获取数据。什么是网络套件?Web 工具包可以做任何浏览器可以处理的事情。对于某些浏览器,Web kit 是底层的网页渲染工具。Web kit 是 QT 库的一部分,所以如果你安装了 QT 和 PyQT4 库,你可以直接运行它。

  您可以使用命令行安装存储库:

  sudo apt-get install python-qt4

  现在所有的准备工作都完成了,我们将使用一种全新的方法来提取信息。

  解决方案

  我们首先通过 Web kit 发送请求信息,然后等待页面完全加载,然后将其分配给变量。接下来我们使用 lxml 从 HTML 数据中提取有效信息。这个过程需要一点时间,但您会惊讶地看到整个页面加载完毕。

  导入系统

  从 PyQt4.QtGui 导入 *

  从 PyQt4.Qtcore 导入 *

  从 PyQt4.QtWebKit 导入 *

  类渲染(QWebPage):

  定义初始化(自我,网址):

  self.app = QApplication(sys.argv)

  QWebPage.init(self)

  self.loadFinished.connect(self._loadFinished)

  self.mainFrame().load(QUrl(url))

  self.app.exec_()

  def _loadFinished(自我,结果):

  self.frame = self.mainFrame()

  self.app.quit()

  Render 类可用于渲染网页。当我们创建一个新的 Render 类时,它可以加载 url 中的所有信息并将其存储在一个新的框架中。

  网址 = '#x27;

  # 这很神奇。加载所有内容

  r = 渲染(网址)

  # 结果是一个QString。

  结果 = r.frame.toHtml()

  使用上面的代码,我们将 HTML 结果存储到变量 result 中。由于lxml不能直接处理这种特殊的字符串数据,我们需要转换数据格式。

  # QString 在被 lxml 处理之前应该被转换为字符串

  formatted_result = str(result.toAscii())

  # 接下来从 formatted_result 构建 lxml 树

  树 = html.fromstring(formatted_result)

  # 现在使用正确的 Xpath 我们正在获取档案的 URL

  archive_links = tree.xpath('//div[@class="campaign"]/a/@href')

  打印存档链接

  使用上面的代码,我们可以得到所有的文件链接信息,然后我们可以使用这些Render和这些URL链接来提取文本内容信息。Web kit 提供了一个强大的网页渲染工具,我们可以使用这个工具从 JS 渲染的网页中抓取有效的信息。

  

  在本文中,我介绍了一种从 JS 渲染的网页中获取信息的有效方法。虽然这个工具比较慢,但是非常简单粗暴。我希望你会喜欢这个文章。现在您可以将此方法应用于您发现难以处理的任何网页。

  愿你事事如意。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线