Web 爬虫
2023-12-17|2024-12-23
静水流深
Files & media
type
status
date
slug
summary
tags
category
icon
password
Formula
File Name
URL
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” 的所有标签: