常用正则表达式爬取网页信息及分析HTML标签总结
- 1.获取<tr></tr>标签之间内容
- 2.获取<a href..></a>超链接之间内容
- 3.获取URL最后一个参数命名图片或传递参数
- 4.爬取网页中所有URL链接
- 5.爬取网页标题title两种方法
- 6.定位table位置并爬取属性-属性值
- 7.过滤<span></span>等标签
- 8.获取<script></script>等标签内容
- 9.通过replace函数过滤<br />标签
- 10.获取<img ../>中超链接及过滤<img>标签
1.获取标签之间内容
该部分主要是通过正则表达式获取两个标签之间的内容,
通常这种标签都是成对出现的。
开始标签如:<tr>、<th>、<td>、<a>、<table>、<div>...
后缀标签如:</tr>、</th>、</td>、</a>、</table>、</div>...
核心代码:
res_tr = r'<tr>(.*?)</tr>'
m_tr = re.findall(res_tr,language,re.S|re.M)
import re
language = '''<tr><th>性別:</th><td>男</td></tr><tr>'''
#正则表达式获取<tr></tr>之间内容
res_tr = r'<tr>(.*?)</tr>'
m_tr = re.findall(res_tr,language,re.S|re.M)
for line in m_tr:
print(line)
#获取表格第一列th 属性
res_th = r'<th>(.*?)</th>'
m_th = re.findall(res_th,line,re.S|re.M)
for mm in m_th:
print(mm,) #unicode防止乱
#获取表格第二列td 属性值
res_td = r'<td>(.*?)</td>'
m_td = re.findall(res_td,line,re.S|re.M)
for nn in m_td:
print(nn)
通常在使用正则表达式时,需要分析网页链接,获取URL或网页内容
核心代码如下:
res = r'<a .*?>(.*?)</a>'
mm = re.findall(res, content, re.S|re.M)
urls=re.findall(r"<a.*?href=.*?<\/a>", content,re.I|re.S|re.M)
import re
content = '''
<td>
<a href="https://www.baidu.com/articles/zj.html" title="浙江省">浙江省主题介绍</a>
<a href="https://www.baidu.com//articles/gz.html" title="贵州省">贵州省主题介绍</a>
</td>
'''
#获取<a href></a>之间的内容
print("获取链接文本内容:")
res = r'<a .*?>(.*?)</a>'
mm = re.findall(res, content, re.S|re.M)
for value in mm:
print(value)
#获取所有<a href></a>链接所有内容
print('\n获取完整链接内容:')
urls=re.findall(r"<a.*?href=.*?<\/a>",content, re.I|re.S|re.M)
for i in urls:
print(i)
#获取<a href></a>中的URL
print('\n获取链接中URL:')
res_url = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
link = re.findall(res_url,content,re.I|re.S|re.M)
for url in link:
print(url)
3.获取URL最后一个参数命名图片或传递参数
通常在使用Python爬取图片过程中,会遇到图片对应的URL最后一个字段通常用于命名图片
urls = "http://i1.hoopchina.com.cn/11/BbsImg141568417848931_640*640.jpg"
values = urls.split('/')[-1]
print(values)
在使用Python获取GET方法的URL链接中,还可能存在传递参数的值。
此时获取参数方法如下:
url = 'http://localhost/test.py?a=hello&b=world'
values = url.split('?')[-1]
print(values)
for key_value in values.split('&'):
print(key_value.split('='))
4.爬取网页中所有URL链接
import re
import urllib
url = "http://www.csdn.net/"
content = urllib.urlopen(url).read()
urls = re.findall(r"<a.*?href=.*?<\/a>", content, re.I)
for url in urls:
print(url)
link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", content)
for url in link_list:
print(url)