抓取HTML和JavaScript

5 投票
4 回答
13594 浏览
提问于 2025-04-18 00:40

我正在做一个项目,需要爬取几个网站,收集不同类型的信息,比如文本、链接、图片等等。

我用的是Python来实现这个功能。我尝试过使用BeautifulSoup来处理HTML页面,这个方法有效,但在解析那些包含很多JavaScript的网站时遇到了困难,因为这些网站上的大部分信息都存储在<script>标签里。

有没有什么好的办法可以解决这个问题呢?

4 个回答

0

一种非常快速的方法是遍历所有标签,然后获取它们的 textContent。这段代码是用JavaScript写的:

page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; 

或者你也可以在selenium/python中这样做:

import selenium
from selenium import webdriver
driver = webdriver.Chrome()

driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')

在这里输入图片描述

0

下面是关于如何开始使用selenium和BeautifulSoup的一些简单步骤:

首先,你需要通过npm(Node包管理器)来安装phantomjs:

apt-get install nodejs
npm install phantomjs

接下来,安装selenium:

pip install selenium

然后,你会得到一个结果页面,像这样,然后像往常一样用BeautifulSoup来解析它:

from BeautifulSoup4 import BeautifulSoup as bs
from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)
2

如果网页加载时涉及很多动态的JavaScript内容,那事情就会变得复杂一些。

基本上,你有三种方法可以从网站上抓取数据:

  • 使用浏览器的开发者工具,查看在页面加载时有哪些AJAX请求。然后在你的爬虫中模拟这些请求。你可能需要用到jsonrequests这两个模块的帮助。
  • 使用像selenium这样的工具,它可以模拟真实的浏览器。在这种情况下,你不需要关心页面是如何加载的——你会得到真实用户看到的内容。注意:你也可以使用无头浏览器
  • 看看网站是否提供API(例如沃尔玛API)。

另外,建议你看看Scrapy这个网页抓取框架——虽然它也不处理AJAX请求,但这是我用过的网页抓取工具中最好的。

还可以参考这些资源:

希望这些对你有帮助。

4

首先,从网页上抓取和解析JavaScript并不是一件简单的事。不过,如果你使用无头浏览器,这个过程会简单很多。无头浏览器就像普通浏览器一样,可以自动解析网页上的内容。
唯一的不同是,它的主要操作方式不是图形界面,而是通过API来进行。

比如,你可以使用PhantomJS,它可以和Chrome或Firefox一起使用,这两个浏览器都支持无头模式。

想要查看更完整的无头浏览器列表,可以点击这里

撰写回答