欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

2-2.数据解析篇

发布时间:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2-2.数据解析篇 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

python 里面得标准库 正则

match 的使用

import recontent = '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 requestshtml = ''' <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())passit = 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 requestsres = 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 etreetext = ''' <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())')

总结

以上是生活随笔为你收集整理的2-2.数据解析篇的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。