2-2.数据解析篇

python 里面得标准库 正则

match 的使用

import re

content = 'Hello 123 456 welcome to tuling'
result = re.match('^Hello\s\d\d\d\s\d{3}\s\w{7}', content)

# print(result.span())
# (0, 21)

# print(result.group())
# Hello 123 456 welcome

# 匹配1次到多次  \d+
content1 = 'Hello 123456 welcome to tuling'
result1 = re.match('^Hello\s(\d+)\swelcome', content1)

# print(result1.group(1))
# 123456

# 通用匹配
content2 = 'Hello 123 456 welcome to tuling'
# 匹配所有数据 ^ 以什么什么开头  $ 以什么什么结尾
result2 = re.match('^Hello.*ng$', content2)
# print(result2.group(0))
# Hello 123 456 welcome to tuling

# 分组匹配只有用(.*)小括号才可以用group(1)
result3 = re.match('^Hello(.*)ng$', content2).group(1)
# print(result3)
#  123 456 welcome to tuli


# 贪婪模式讲解
content4 = 'http://feier.com/yyds/asdasdas'
# 非贪婪模式   .*? 匹配到第一个就结束
result4 = re.match('http.*?com/(.*?)s', content4)
# print(result4.group())
# http://feier.com/yyds

# 贪婪模式    .* 匹配到最后一个
result5 = re.match('http.*?com/(.*)s', content4)
# print(result5.group())
# http://feier.com/yyds/asdasdas

# 修饰符
# 这个修饰符的作用是匹配包括换行符在内的所有字符。
content5 = '''Hello 1234567 World_This
is a Regex Demo
'''
result6 = re.match('^He.*?(\d+).*?Demo$', content5)
# print(result6)
# None 返回空  就是没有匹配成功


# re.S 能够匹配所有字符串,包括换行
result7 = re.match('^He.*?(\d+).*?Demo$', content5,re.S)
# print(result7.group())
'''
Hello 1234567 World_This
is a Regex Demo
'''
# print(result7.group(1))
# 1234567

findall 返回得是列表 查询全部得意思

html = '''<div id="songs-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路上有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="齐秦">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>'''

results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S)
print(results)

PyQuery的使用

from pyquery import PyQuery as pq
import requests

html = '''
<div id="cont">

    <ul class="slist">
    
         <li class="item-0">web开发</li>
         <li class="item-1"><a href="link2.html">爬虫开发</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">数据分析</span></a></li>
         <li class="item-1 active"><a href="link4.html">深度学习</a></li>
         <li class="item-0"><a href="link5.html">机器学习</a></li>
         
     </ul>
     
 </div>
'''

obj = pq(html)
 # 固定语法   空格能够让底层开发技术 根据规律来进行后续得工作    # id 选择器  . 是class选择器    为了编写css 语法的
li = obj('#cont .slist li')

# 爬虫课 需要的基本知识  前端技术的一个了解   html css JavaScript
for i in li.items():
    # print(i)
    # 提取内容
    # print(i.text())
    pass


it = obj('ul')
# 通过查找方式
# print(it.find('li'))
# 子节点  子  方法  查找全部儿子
# print(it.children())
# 找上级  一起返回
# print(it.parent())


li = obj('.slist .item-0.active a')
# print(li.siblings())
# print(li.siblings('.active'))

# 提取属性
doc = pq(html)
li2 = doc('.item-0.active')
# print(li2)
li2.removeClass('active')
# print(li2)
li2.addClass('feifei')
# print(li2)

抓取图片名称和地址

from pyquery import PyQuery as pq
import requests

res = requests.get('https://pic.netbian.com/4kmeinv/index.html')
res.encoding = 'gbk'
document = pq(res.text)
img_list = document('.slist ul li img')

item_list = []
for i in img_list:
    item_list.append(dict(i.items()))

imags_url = []
image_name = []

for it in item_list:
    imags_url.append('https://pic.netbian.com' + it['src'])
    image_name.append(it['alt'])

images = zip(imags_url,image_name)

print(list(images))

XPath使用

XPath常用规则
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点,类似于this
… 选取当前节点的父节点
@ 选取属性

案例

from lxml import etree

text = '''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a>
     </ul>
 </div>
'''


html = etree.HTML(text)

a = html.xpath('//ul/li/a')
for i in a:
    # 提取属性  返回的格式是列表形式
    print(i.xpath('./@href'))
    # 提取文本
    print(i.xpath('./text()'))


# 讲讲contains   模糊查询
# //a[contains(text(),'下一页')]/@href

#去除结果中的/r/n
normalize-space()
案例:
ite.xpath('normalize-space(./div/div[@class="resblock-price"]/div/span[@class="number"]/text())')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值