内容导读
- 实现HTTP请求
- 解析网页
- 存储数据
- 静态网页爬取实例
一、实现HTTP请求
1、爬虫场景简介
(1)基本功能
爬虫的基本功能是读取URL和爬取网页内容,这就需要爬虫具备能够实现HTTP请求的功能。请求过程主要包括生成HTTP请求、请求头处理、超时设置、请求重试、查看状态码等。
(2)实例介绍
通过Chrome开发者工具直接查看网页“http://www.jd.com”的页面元素、页面源代码和资源详细信息,并分别通过urllib 3库、Requests库实现向网页发送GET类型的HTTP请求,并获取返回的响应。
爬取步骤:
使用Chrome开发者工具查看页面元素、页面源代码和资源详细信息。
使用urllib 3库生成HTTP请求。
使用urllib 3库处理请求头。
使用urllib 3库设置超时时间(timeout)。
使用urllib 3库设置请求重试。
使用Requests库生成HTTP请求。
使用Requests库查看状态码与编码。
使用Requests库处理请求头与响应头。
使用Requests库设置超时时间。
2、使用Chrome开发者工具查看网页
Chrome浏览器提供了一个非常便利的开发者工具,供广大Web开发者使用,该工具提供查看网页元素、查看请求资源列表、调试JavaScript代码等功能。
该工具的打开方式是右击Chrome浏览器页面,在弹出的快捷菜单中单击下图所示的“检查”选项。
也可以单击Chrome浏览器右上角的菜单 ,如下图所示,单击“更多工具”选项中的“开发者工具”选项打开开发者工具,或直接使用“F12”键打开开发者工具,效果如下图:
网站地址:“https://www.jd.com”。
二、解析网页
通过解析网页可以获取网页包含的数据信息,如文本、图片、视频等,这需要爬虫具备定位网页中信息的位置并解析网页内容的功能。
本任务分别通过Xpath、Beautiful Soup库和正则表达式解析通过Requests库获取的网页“https://www.jd.com”的网页内容,即获取其中的元素及相关信息。
1、爬取步骤
使用lxml库的etree模块实现通过Xpath获取网页内容中的标题内容、节点下的文本内容。
使用Beautiful Soup库创建BeautifulSoup对象,将HTML文档转换为文档树。
使用Beautiful Soup库搜索文档树中的文本内容、属性值。
使用正则表达式匹配字符串。
使用正则表达式查找网页中的标题内容。
2、xml路径语言XPath
XML路径语言(XML Path Language,XPath)是一门在XML文档中查找信息的语言。
XPath最初被设计用于搜寻XML文档,但同样适用于HTML文档的搜索。
XPath的选择功能十分强大,它不仅提供了非常简洁明了的路径选择表达式,还提供了超过100个内建函数,用于字符串、数值、时间的匹配,以及节点、序列的处理等,几乎所有定位的节点都可以用XPath来选择。
使用Xpath需要从lxml库中导入etree模块,还需要使用HTML类对需要匹配的HTML对象进行初始化。HTML类的基本语法格式如下。
三、存储数据
爬虫通过解析网页获取页面中的数据后,还需要将获得的数据存储下来以供后续分析。
1、存储过程
使用JSON模块将Xpath获取的文本内容存储为JSON文件。
使用PyMySQL库将Beautiful Soup库获取的标题存储入MySQL数据库。
使用JSON模块将Xpath获取的文本内容存储为JSON文件。
使用PyMySQL库将Beautiful Soup库获取的标题存储入MySQL数据库。
2、将数据存储为JSON文件
JSON文件的操作在Python中分为解码和编码两种,都通过JSON模块来实现。
其中,编码过程为将Python对象转换为JSON对象的过程,而解码过程则相反,其将JSON对象转换为Python对象。
将数据存储为JSON文件的过程为一个编码过程,编码过程常用到dump函数和dumps函数。
两者的区别在于,dump函数将Python对象转换为JSON对象,并通过fp文件流将JSON对象写入文件内,而dumps函数则生成一个字符串。
dump函数和dumps函数的基本语法格式如下。
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
dump函数和dumps函数的常用参数及其说明。
3、连接方法
PyMySQL库使用connect函数连接数据库,connect函数的参数为Connection构造函数的参数,基本语法格式如下。
4、数据库操作函数
PyMySQL库中可以使用函数对返回的连接(connect)对象进行操作,常用的连接对象操作函数如表所示。
在通过Python操作数据库的过程中,通常使用pymysql.connect.cursor()方法获取游标,或使用pymysql.cursor.execute()方法对数据库进行操作,如创建数据库和数据表等,使用更多的为增、删、改、查等基本操作。游标对象也提供了很多种方法,常用的方法如表。
5、将数据存储到MySQL数据库
游标对象的创建是基于连接对象的,创建游标对象后即可通过SQL语句对数据库进行增、删、改、查等操作。
在连接的MySQL数据库中创建一个表名为class的表,该表包含id、name、text这3列,使用id列作为主键,之后将Beautiful Soup库获取的标题文本存入该表中。
四、静态网页爬取实例
爬取静态网页的内容,可以使用Python的requests
库来获取网页内容,然后使用BeautifulSoup
库来解析HTML并提取所需数据。
1、安装requests
与beautifulsoup4
库
# 如果已安装可跳过
pip install requests beautifulsoup4
# 或
py -m pip install requests beautifulsoup4
2、示例代码
# 导入库
import requests
from bs4 import BeautifulSoup
# 目标网页URL
url = 'https://www.jd.com'
# 发送HTTP请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 提取你感兴趣的数据,例如所有段落文本
paragraphs = soup.find_all('p')
for p in paragraphs:
print(p.text)
else: # 搜索内容夫败提示
print(f'Failed to retrieve page: status code {response.status_code}')
更多精彩内容请关注本站!