最近在学习Python爬虫,将自己的所学的一点东西用文章记录下来
一. 正则数据处理
首先引入re模块
import re
例如以下待处理的数据
<div class="thumb">
<a href="/article/123934388" target="_blank">
<img src="//pic.qiushibaike.com/system/pictures/12393/123934388/medium/KOSEBE8GS8TBYBTC.jpg" alt="糗事#123934388" class="illustration" width="100%" height="auto">
</a>
</div>```
1.要将src的属性值取出 首先建立正则表达式
ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'```
2.取出数据
img_src_list = re.findall(ex,response,re.S)
PS:
①要注意,这里取出的是一个列表形式,可以使用for循环将其取出
②其中的response为上面的待处理数据
③re.S单行匹配 re.M多行匹配 re.I 忽略大小写
二. xpath数据处理
引入模块
from lxml import etree
以下为待处理数据
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" title="赵匡胤" target="_self">
<span>this is span</span>
宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
<img src="http://www.baidu.com/meinv.jpg" alt="" />
</div>
1.首先实例化一个etree对象,将被解析的数据加载到对象中
tree = etree.parse('/Users/wuxiuye/Desktop/Python/test.html')
2.对其进行数据处理
①如果要取出“src=”后的链接,即取出一个属性值
r = tree.xpath('//div[@class="song"]/img/@src')
print(r)
②如果要取出李清照,即取出一个文本
r = tree.xpath('//div[@class="song"]/p/text()')
print(r)
如果这样运行,r是一个列表,其中列表中的数据是
['李清照', '王安石', '苏轼', '柳宗元']
但如果把代码修改成
#/text()获取标签中直系内容
#//text()获取标签中所有内容
r = tree.xpath('//div[@class="song"]/p[1]/text()')[0]
print(r)
r就是李清照
PS:如果要一次性取多个数据 两个表达式直接用|连接
a_list = tree.xpath('//div[@class="bottom"]/ul/li/a | //div[@class="bottom"]/ul/div[2]/li/a')
如果喜欢就给点个赞吧!!