xpath简介
- 解析页面模块比较:
-
正则表达式是进行内容匹配,将符合要求的内容全部获取;
-
xpath()能将字符串转化为标签,它会检测字符串内容是否为标签,但是不能检
测出内容是否为真的标签; -
Beautifulsoup是Python的一个第三方库,它的作用和 xpath 作用一样,都是用来解析html数据的相比之下;xpath的速度会快一点,因为xpath底层是用c来实现的
-
2.三者语法不同,正则表达式使用元字符,将所有获得内容与匹配条件进行匹配,
而xpath和bs4将获取的解析后的源码进行按条件筛选,筛选出想要的标签即根据标签属性来找到指定的标签,之后对标签进行对应内容获取;
xpath:全称XML PATH Language, 一种小型的查询语言;
支持的解析:
XML格式
html格式
通过元素,和属性进行导航
xpath常用规则及运算符
import lxml.etree as etree
# 1). 将html内容转化成xpath可以解析/匹配的格式;
html = """
<!DOCTYPE html>
<html>
<head lang="en">
<title>xpath测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<div id="content">
<ul id="ul">
<li>NO.1</li>
<li>NO.2</li>
<li>NO.3</li>
</ul>
<ul id="ul2">
<li>one</li>
<li>two</li>
</ul>
</div>
<div id="url">
<a href="http:www.58.com" title="58">58</a>
<a href="http:www.csdn.net" title="CSDN">CSDN</a>
</div>
</body>
</html>
"""
selector = etree.HTML(html)
# 2).
# //: 对全文进行扫描
# //div
# //div[@id="content"]
str = selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()')
print(str)
print(type(str))
# 需求: 获取文件中div的属性id为”url“里面的所有a标签的href属性
str1 = selector.xpath('//div[@id="url"]/a/@href')
print(str1)
xpath爬取mooc网课程
- 爬取的链接: http://www.imooc.com/course/list
- 爬取的内容: 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述
- 爬取的内容如何存储:
- 文件(.csv, );
- mysql数据库;
- 分析爬取的信息;
- 词云
csv格式储存
csv格式存储: csv文件格式是一种通用的电子表格和数据库导入导出格式。
xxx:xxx:xxx:xxx
xxx,xxx,xxx,xxx
# 读取csv文件
import csv
with open('some.csv', 'rb') as f: # 采用b的方式处理可以省去很多问题
reader = csv.reader(f)
for row in reader:
# do something with row, such as row[0],row[1]
import csv
with open('some.csv', 'wb') as f: # 采用b的方式处理可以省去很多问题
writer = csv.writer(f)
writer.writerows(someiterable)
import csv
with open('doc/example.csv', 'w') as f:
writer = csv.writer(f)
# 将列表的每条数据依次写入csv文件, 并以逗号分隔
writer.writerows([['1', '2', '3'], ['4', '5', '6']])
with open('doc/example.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
<