type
status
date
slug
summary
tags
category
icon
password
AI summary
Web 爬虫
在本章中,我们将探索使用 Python 进行网页抓取的基础知识。 Web 抓取是从网站中提取数据的过程。 Python 是一种流行的网络抓取语言,因为它有许多用于此目的的有用库。到本章结束时,您将对使用 Python 进行网页抓取有基本的了解,并能够自己从网站中提取数据。
爬虫概述
什么是 Web 爬虫?
Web 爬虫是从网站中提取数据的过程。数据可以是 HTML、XML 或 JSON 等各种格式。Web 爬虫的应用包括研究、数据分析和自动化等方面。在 Python 中,使用第三方库如 BeautifulSoup 和 Requests 进行 Web 爬虫。
Web 爬虫是否合法?
Web 爬虫的合法性取决于其目的和方法的使用。一般来说,只要不违反网站的服务条款或版权法,Web 爬虫就是合法的。但是,如果 Web 爬虫涉及访问私人数据或侵犯某人的知识产权,那么它就是非法的。
Web 爬虫需要遵守道德规范。一些网站可能不希望其数据被爬取,重视尊重他们的意愿是非常重要的。此外,Web 爬虫可能会对网站的资源造成压力,因此使用 Web 爬虫时要注意责任。
可以被爬取的网页类型
一般来说,可以被爬取的网站类型可以分为两类:
- 静态网站,即网站的内容不会随时间变化而变化,如博客、新闻等网站。
- 动态网站,即网站的内容会随时间变化而变化,如在线商城、社交网站等网站。
在爬取不同类型的网站时,需要使用不同的爬虫工具和技术,比如对于静态网站,可以使用 requests 、urllib 等工具进行爬取;对于动态网站,一般需要使用 Selenium 等工具模拟浏览器行为进行爬取。
Web 爬虫入门
基础用法
- 了解 HTML,CSS 和 JavaScript
- 安装第三方库(Requests 和 BeautifulSoup )
在进行网页内容解析时,需要了解 HTML、CSS 和 JavaScript 等前端技术的基础知识。HTML 是网页内容的结构化表示,CSS 用于控制网页的外观和样式,JavaScript 用于控制网页的交互行为。了解这些知识可以帮助我们更好地理解网页的结构和内容,从而更好地进行网页内容解析。
在开始网络抓取之前,我们需要安装一些必需的库。我们将在本章中使用 Requests 和 BeautifulSoup 库。 Requests 是一个常用于 HTTP 请求的 Python 库,在使用 Requests 库进行爬虫时,通常需要进行如下几个步骤:
- 发送请求,获取网页内容;
- 解析网页内容,提取需要的数据;
- 存储数据或进行后续处理。
Beautiful Soup 是另外一个 Python 库,用于从 HTML 和 XML 文件中提取数据。 它通常用于网页抓取。 它创建了一个解析树,便于在不同的节点之间轻松遍历。
- 三种常见的 HTML 解析器 | 解析器名称 | 特点 | | ———- | ———————————————————— | | html.parser | Python 自带的标准库,可以进行基本的 HTML 解析。速度比较快,但是容错能力稍差。 | | lxml | 速度较快,容错能力较好,支持 XPath 等高级解析技术,但需要安装 C 语言库和依赖库。 | | html5lib | 支持最好的容错能力,可以处理非标准的 HTML 代码,但是解析速度相对较慢。 |
因此,在选择解析器时,需要根据实际需要进行选择。如果需要解析的是基本的 HTML 代码,可以选择 html.parser 解析器;如果需要解析的是复杂的 HTML 代码,可以选择 lxml 解析器;如果需要容错能力最好的解析器,可以选择 html5lib 解析器。
我们用 Requests 和 Beautiful Soup 爬取百度首页的标题和正文内容。
首先,我们导入了 Requests 和 BeautifulSoup 库。我们定义了一个 URL,并使用 requests.get() 方法获取页面内容。我们将获取到的内容传递给 BeautifulSoup 对象,并使用 ‘html.parser’ 进行解析。
然后,我们使用 soup.title.string 获取页面标题。同样地,我们使用 soup.get_text() 获取页面正文内容。
存储爬取数据为 CSV 或 JSON 格式
以某微信公众号文章上汇总的学术期刊投稿方式为例,通过 Python 爬虫将爬取内容保存为 CSV 格式。
- read_html(url, flavor=“html5lib”)
- 参数一:url,除了可以接受含有表格 table 的网址 url,可以接受含有 table 标签的字符串,还可以是本地文件。
- 参数二:flavor,表示指定的解析器类型,默认是 lxml,这些都需要事先通过 pip 命令安装。返回的结果是DataFrame组成的list
- concat 函数
- 参数一:args 是必需的,表示参与拼接的 pandas 对象,如列表或字典,本代码中指的是 dfs。
- 参数二:axis 表示在哪些轴方向上(行或列)进行数据拼接,其值 0 是行,1 是列。由于本文实现相同字段的表首尾相拼接,所以采用默认值 axis=0。当 axis = 1 的时候,concat 就是行对齐,表示横向表拼接。
- to_csv(“submit-table.csv”, encoding=“utf-8-sig”, index=None, header=None)
- 参数一:“submit-table.csv”表示将 Dataframe 对象保存为 csv 的文件名。
- 参数二:encoding=‘utf-8-sig’,表示指定文件的编码,为了防止用 Office Excel 打开含中文字符的 csv 时出现乱码,这里指定 utf-8-sig 表示带有签名的 utf-8(UTF-8 with BOM)。
- 参数三:index=None 不需要 csv 中每行的第一列中出现索引数字列。
- 参数四:设置 header=None,因为表格中已含有中文表头(学科,期刊刊名,投稿地址),所以不需出现起始 0 的数字表头。
高级用法
Beautiful Soup 提供了丰富的功能,可以让我们轻松地处理不同的 HTML 和 JSON 文件。这里介绍一些更高级的用法,我们可进一步了解。
查找所有标签
Beautiful Soup 提供了多种方法来查找标签。最基本的方法是 find_all() 方法。它可以查找所有指定的标签,并以列表的形式返回。例如,下面的代码将查找页面上的所有段落标签(<p>):
- What(什么):这段代码使用 Python 的 requests 库和 BeautifulSoup 库从指定 URL 获取 HTML 页面,并查找所有段落元素。
- Why(为什么):该代码可以用于网页爬虫、数据挖掘、自然语言处理等方面的应用,如获取网页中的文字内容、分析网页结构等。
- How(如何):首先,我们定义了要访问的 URL。然后,使用 requests.get()方法发送 GET 请求并获取响应。接着,使用 BeautifulSoup 库解析响应文本,将 HTML 页面转换为可操作的 Python 对象。最后,使用 find_all()方法查找所有段落元素,并将它们输出到控制台。
- Response(响应):该代码将返回百度网站中的所有段落元素,以列表的形式存储在 paragraphs 变量中。我们可以使用其他方法对这些元素进行操作,如提取文本内容、获取元素属性等。
查找单个标签
如果你只需要查找第一个匹配的标签,可以使用 find() 方法。例如,下面的代码将查找页面上的第一个段落标签:
根据属性查找标签
你可以根据标签的属性来查找标签。例如,下面的代码将查找页面上 class 属性为 “content” 的所有标签: