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())')
原文地址:https://www.jb51.cc/wenti/3285913.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。