来源于此为了方便自己查找,进行了简化与整理。
本文涉及内容如下:
- 获取< tr>< /tr>标签之间内容
- 获取< a href…>< /a>超链接之间内容
- 获取URL最后一个参数命名图片或传递参数
- 爬取网页中所有URL链接
- 爬取网页标题title两种方法
- 定位table位置并爬取属性-属性值
- 过滤< span>< /span>等标签
- 获取< script>< /script>等标签内容
- 通过replace函数过滤< br />标签
- 过滤html标签
1.获取 < tr> 标签之间内容
核心代码:
s = re.findall( r'(.*?) ',language,re.S|re.M)
举个例子:
import re
doc = '''性別: 男 '''
string1 = re.findall(r'(.*?) ', doc, re.S | re.M)
print(string1[0])
string2= re.findall(r'(.*?) ', doc, re.S | re.M)
print(string2)#从这里可以看出返回的是一个列表
输出结果:
>>>
<th>性別:</th><td>男</td>
['男']
>>>
# re.I: 忽略大小写
# re.M: 多行模式,改变'^'和'$'的行为
# re.S: 点任意匹配模式,改变'.'的行为
2.获取超链接< a href=..>< /a >之间内容
核心代码:
url = re.findall(r'(.*?)', content, re.S|re.M)
举个例子:
import re
doc = '''
浙江省主题介绍
贵州省主题介绍
'''
# 获取之间的内容
print('获取链接文本内容:')
s1 = re.findall(r'(.*?)', doc, re.I|re.S|re.M)
for i in s1:
print(i)
# 获取所有链接所有内容
print('\n获取完整链接内容:')
s2 = re.findall(r"", doc, re.I|re.S|re.M)
for i in s2:
print(i)
# 获取中的URL
print('\n获取链接中URL:')
s = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
s3 = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", doc, re.I|re.S|re.M)
for i in s3:
print(i)
输出结果:
>>>
获取链接文本内容:
浙江省主题介绍
贵州省主题介绍
获取完整链接内容:
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>
获取链接中URL:
https://www.baidu.com/articles/zj.html
https://www.baidu.com//articles/gz.html
>>>
3.获取URL最后一个参数命名图片或传递参数
举个例子:
url = "http://www.kaotop.com/file/tupian/20220706/error.html"
value = url.split('/')[-1]
print(value)
输出结果:
>>>
Img1415_00.jpg
>>>
4.爬取网页中所有URL链接
举个例子:
import re
import urllib.request
url = "http://www.csdn.net/"
doc = urllib.request.urlopen(url).read().decode('utf-8')
urls = re.findall(r"", doc, re.I)
for url in urls:
print(url)
link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", doc)
for url in link_list:
print(url)
输出结果:
>>>
<a href="https://live.csdn.net" target="_blank" data-report-click="{"spm":"1000.2115.3001.4124","dest":"https://live.csdn.net","extra":"{\"fId\":558,\"fName\":\"floor-www-index\",\"compName\":\"www-interaction\",\"compDataId\":\"index-nav-www\",\"fTitle\":\"\",\"pageId\":141}"}" data-report-query="spm=1000.2115.3001.4124"><img src="http://www.kaotop.com/file/tupian/20220706/20210708022656.png" alt="直播"> <span>直播</span></a>
<a href="https://blink.csdn.net/" target="_blank" data-report-click="{"spm":"1000.2115.3001.4124","dest":"https://blink.csdn.net/","extra":"{\"fId\":558,\"fName\":\"floor-www-index\",\"compName\":\"www-interaction\",\"compDataId\":\"index-nav-www\",\"fTitle\":\"\",\"pageId\":141}"}" data-report-query="spm=1000.2115.3001.4124"><img src="http://www.kaotop.com/file/tupian/20220706/20200629060547.png" alt="动态"> <span>动态</span></a>
…………
https://g.csdnimg.cn/static/logo/favicon32.ico
https://www.csdn.net
…………
>>>
5.爬取网页标题title两种方法
举个例子:
import re
import urllib.request
url = "http://www.csdn.net/"
doc = urllib.request.urlopen(url).read().decode('utf-8')
print('方法一:')
ti = re.compile(r'(?<=).*?(?= )', re.M|re.S)
tit = re.search(ti, doc)
print(tit.group())
#group() :匹配正则表达式整体结果,同group(0)。
#group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分。
print('方法二:')
title = re.findall(r'(.*?) ', doc)
print(title[0])
输出结果:
>>>
方法一:
CSDN - 专业开发者社区
方法二:
CSDN - 专业开发者社区
>>>
6.定位table位置并爬取属性-属性值
正则表达式可以通过find函数寻找指定table方法进行定位。
举个例子:
start = content.find(r') #起点记录查询位置
end = content.find(r'
')#结束位置
print(doc[start:end])
标签内容中的属性值 td 可能存在其他属性,同时< td>< /td>之间的内容也需要处理。
下面先讲解获取td值的例子:
import re
doc = '''
序列号 DEIN3-39CD3-2093J3
日期 2013年1月22日
售价 392.70 元
说明 仅限5用户使用
'''
s = r'(.*?) (.*?) '
m = re.findall(s, doc, re.S | re.M)
for line in m:
print(line[0],line[1])
输出结果:
>>>
序列号 DEIN3-39CD3-2093J3
日期 2013年1月22日
售价 392.70 元
说明 仅限5用户使用
>>>
如果为< td id=“”>,则正则表达式为r’< td id=.?>(.?)< /td>’
如果不是id属性开头,则正则表达式为r’?>(.?)< /td>’
7.过滤< span>< /span>等标签
举个例子:
import re
doc = '''
異名:
(字) 翔宇
籍貫:
浙江省绍兴市
'''
# 获取table中tr值
str = re.findall(r'(.*?) ', doc, re.S | re.M)
for line in str:
# 获取表格第二列td 属性
td = re.findall(r'(.*?) ', line, re.S|re.M)
for n in td:
if "span" in n: # 处理标签
value = re.findall(r'(.*?)', n, re.S|re.M)
for i in value:
print(i)
输出结果:
>>>
(字) 翔宇
>>>
8.获取< script> < /script>等标签内容
在获取图集对应的原图它是存储在script中,其中获取原图-original即可,缩略图-thumb,大图-big,通过正则表达式下载URL:
import re
import urllib.request
import os
content = '''
'''##我进行了简化,这里只是展示爬取方法,所以这个网址不存在404
str = re.findall(r'', content, re.S | re.M)
for script in str:
m = re.findall(r'"original":"(.*?)"', script)
for i in m:
print(i)
filename = os.path.basename(i) # 去掉目录路径,返回文件名
urllib.request.urlretrieve(i,'E:\'+filename) #下载图片
输出结果:会输出网址,同时下载图片至E盘。
9.通过replace过滤< br />标签
核心代码:
if '
' in value:
value = value.replace('
','') #过滤该标签
value = value.replace('\n',' ') #换行空格替代 否则总换行
10.过滤html标签
核心代码:
value = re.sub('<[^>]+>','', doc)
举个例子:
import re
doc = '''
中華民國政治人士
政黨:
中國國民黨
'''
value = re.sub('<[^>]+>', '', doc) # 过滤HTML标签
print(value)
输出结果:
>>>
中華民國政治人士
政黨:
中國國民黨
>>>
推荐文章:Python正则表达式指南
欢迎分享,转载请注明来源:内存溢出
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
使用python编写sql时间盲注的exp
上一篇
2022-04-09
python 类变量、类成员变量与C++ 的不同
下一篇
2022-04-09
评论列表(0条)