python爬虫之网页数据解析详细教程 零基础教学

427次阅读
没有评论

文章目录

  • 前言
  • 一、XPath解析网页
  • 二、BeautifulSoup解析网页
  • 总结

前言

一、XPath解析网页

XPath概念
XPath ,全称 XML Path Language ,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时,完全可以使用 XPath 做相应的信息抽取。
XPath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过 100 个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用 XPath 来选择。

使用 XPath 解析爬取网页
现在演示使用 XPath 解析爬取网页,在古诗词网批量爬取古诗词的标题。
网页部分内容如下所示:
python爬虫之网页数据解析详细教程
在爬取的网页界面,按 F12 可查看网页源码。网页部分源码如下所示:
python爬虫之网页数据解析详细教程
python爬虫之网页数据解析详细教程
从网页源码可以看出,古诗标题在 class 属性为 left 的 div 元素下的 ul 元素下的所有 li 元素下的 strong 元素下的文本信息中,所以 XPath 路径表达式为://div[@class=‘left’]/ul/li/strong/text()。
有了上述信息,就可以进行代码编写,实际代码如下所示:

# 导入urllib与lxml库 import urllib.request from lxml import etree # 爬取网页的网址,此网址仅限于本实训使用 url = ‘http://127.0.0.1:8080/’ # 请求网页获取网页源码 response=urllib.request.urlopen(url=url) html=response.read().decode(“utf-8”) # 将文本转化为HTML元素树 parse = etree.HTML(html) # 写入xpath路径 item_list = parse.xpath(“//div[@class=’left’]/ul/li/strong/a/text()”) print(item_list)

二、BeautifulSoup解析网页

BeautifulSoup 库的安装
BeautifulSoup 和 lxml 一样,BeautifulSoup 也是一个 HTML/XML 的解析器,主要的功能也是解析和提取 HTML/XML 数据。

如果本地 Python 环境没有安装 BeautifulSoup,可以在命令提示符窗口输入命令pip install bs4,安装 BeautifulSoup 模块,如下图所示。
python爬虫之网页数据解析详细教程

BeautifulSoup 库的使用
要使用 BeautifulSoup 库,首先需要进行导包,代码如下:

from bs4 import BeautifulSoup

然后需要创建 BeautifulSoup 对象,现在有包含 HTML 代码的字符串变量 text 如下所示:

text=”’ <?xml version=”1.0″ encoding=”ISO-8859-1″?> <bookstore> <book> <title lang=”eng”>Harry Potter</title> <price>29.99</price> </book> <book> <title lang=”eng”>Learning XML</title> <price>39.95</price> </book> </bookstore> ”’

创建 BeautifulSoup 对象的代码如下所示:

soup=BeautifulSoup(text, ‘lxml’)

BeautifulSoup 对象包含很多有用的属性和方法,比如我们想要将 HTML 代码按照标准缩进格式输出,可以使用.prettify()方法,如下图所示。
python爬虫之网页数据解析详细教程
BeautifulSoup 对象更多有用的属性和方法演示代码如下所示,自己可以在本地进行体验操作:

print(soup.get_text()) # 会将 HTML 文档中的所有标签清除,返回一个只包含文字的字符串 tag=soup.title # 获取title标签 print(tag) print(type(tag)) # tag类型 print(tag.name) # 标签名称 print(tag.attrs) # 标签属性 print(tag.attrs[“lang”]) # 单独获取某个属性 print(soup.title[“lang”]) # 单独获取某个属性 # find_all() 返回所有的title元素 print(soup.find_all(‘title’)) # find() 返回第一个title元素 print(soup.find(“title”)) print(soup.find_all(“title”,lang=“eng”)) # 查找title标签 属性lang=eng print(soup.find_all(“title”,{“lang”:“eng”})) # 结果同上 print(soup.find_all([“title”,“price”])) # 获取多个标签 print(soup.find_all(“title”,lang=“eng”)[0].get_text()) # 获取文本 print(soup.book) # 获取book节点信息 print(soup.book.contents) # 获取book下的所有子节点 print(soup.book.contents[1]) # 获取book下的所有子节点中的第一个节点 print(soup.title.next_sibling) # 获取该节点的下一个兄弟节点 print(soup.title.previous_sibling) # 获取该节点的上一个兄弟节点 print(soup.title.next_siblings) # 获取该节点的全部兄弟节点

总结

本篇文章主要还是介绍爬虫中对网页的数据解析的相关知识点,希望对大家有所帮助!

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-28发表,共计2351字。
新手QQ群:570568346,欢迎进群讨论 Python51学习