任务描述
本关任务:在 XPath 基础实训中,介绍了 XPath 的基础知识,本关需要使用 XPath 技术来编写解析网页的程序。
相关知识
为了完成本关任务,你需要掌握 XPath 的使用。
XPath概念
XPath ,全称 XML Path Language ,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时,完全可以使用 XPath 做相应的信息抽取。 XPath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过 100 个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用 XPath 来选择。
使用 XPath 解析爬取网页
现在演示使用 XPath 解析爬取网页,在古诗词网批量爬取古诗词的标题。
网页部分内容如下所示:
在爬取的网页界面,按 F12 可查看网页源码。网页部分源码如下所示:
从网页源码可以看出,古诗标题在 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)
编程要求
根据提示以及示例,在右侧编辑器 Begin-End 区间补充代码,完善函数 get_data(),批量爬取古诗词作者。src/step1/test.html
为爬取网页的效果代码,可以使用开发者工具审查元素,获取 XPath 的路径信息。
测试说明
平台会对你编写的代码进行测试,当评测出现 Django 启动失败时,重新评测即可。
代码:
import urllib.request
from lxml import etree
def get_data(url):
'''
:param url: 请求地址
:return: None
'''
response=urllib.request.urlopen(url=url)
html=response.read().decode("utf-8")
# *************** Begin *************** #
parse = etree.HTML(html)
# 写入xpath路径
item_list = parse.xpath("//div[@class='left']/ul/li/span/a/text()")
#item_list = parse.xpath("/html/body/div[2]/div[1]/ul/li/span/a.text()")
# *************** End ***************** #
print(item_list)