答案是一共有三种:
1正则表达式解析
2Xpath解析
3BeautifulSoup
一,正则表达式解析
在爬虫中,下面两种方式用的多一些~
大致用法:
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?src="(.*?)".*?name"><a'
+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
items = re.findall(pattern, html)
二,Xpath解析
简介及安装
简介:XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
安装:pip install lxml
调用方法:
# 先导包
from lxml import etree
# 将html文档或者xml文档转换成一个etree对象,然后调用对象中的方法查找指定的节点
# 1. 本地文件
tree = etree.parse(文件名)
tree.xpath("xpath表达式")
# 2. 网络数据
tree = etree.HTML(网页内容字符串)
tree.xpath("xpath表达式")
语法简介
先准备一个HTML格式的字符串
1,选取节点
nodename # 选取nodename节点的所有子节点 xpath(‘//div’) # 选取了所有div节点
/ # 从根节点选取 xpath(‘/div’) # 从根节点上选取div节点
// # 选取所有的当前节点,不考虑他们的位置 xpath(‘//div’) # 选取所有的div节点
. # 选取当前节点 xpath(‘./div’) # 选取当前节点下的div节点
.. # 选取当前节点的父节点 xpath(‘..’) # 回到上一个节点
@ # 选取属性 xpath(’//@calss’) # 选取所有的class属性
#######################⬇例子⬇######################
ret=selector.xpath("//div")
ret=selector.xpath("/div")
ret=selector.xpath("./div")
ret=selector.xpath("//p[@id='p1']")
ret=selector.xpath("//div[@class='d1']/div/p[@class='story']")
2,谓语
表达式 结果
xpath(‘/body/div[1]’) # 选取body下的第一个div节点
xpath(‘/body/div[last()]’) # 选取body下最后一个div节点
xpath(‘/body/div[last()-1]’) # 选取body下倒数第二个div节点
xpath(‘/body/div[positon()<3]’) # 选取body下前两个div节点
xpath(‘/body/div[@class]’) # 选取body下带有class属性的div节点
xpath(‘/body/div[@class=”main”]’) # 选取body下class属性为main的div节点
xpath(‘/body/div[@price>35.00]’) # 选取body下price元素值大于35的div节点
#######################⬇例子⬇######################
ret=selector.xpath("//p[@class='story']//a[2]")
ret