php 正则 抓取网页(Python爬取网页使用的正则表达式及及方法)
优采云 发布时间: 2021-10-15 17:07php 正则 抓取网页(Python爬取网页使用的正则表达式及及方法)
本文文章主要介绍Python在爬取网页信息时经常用到的正则表达式和方法。是一个总结文章,比较实用,主要是解决我遇到的爬虫问题,希望对大家有帮助~
当然,如果Selenium基于自动化测试爬虫和BeautifulSoup分析网页DOM节点会更方便,但本文更多的是基于正则的底层爬取分析。
涉及内容如下: 推荐基础文章:Python正则表达式指南-AstralWind
-------------------------------------------------- -------------------------------------------------- --------------------------
1.获取标签间的内容
这部分主要使用正则表达式来获取两个标签之间的内容,通常这样的标签是成对出现的。
开始标签如:,,
,,
...
后缀标签,例如:
,,
,,
...
核心代码:
res_tr = r'(.*?)
'
m_tr = re.findall(res_tr,language,re.S|re.M)
例子:
# coding=utf-8
import re
language = '''性別:男'''
#正则表达式获取之间内容
res_tr = r'(.*?)'
m_tr = re.findall(res_tr,language,re.S|re.M)
for line in m_tr:
print line
#获取表格第一列th 属性
res_th = r'(.*?)'
m_th = re.findall(res_th,line,re.S|re.M)
for mm in m_th:
print unicode(mm,'utf-8'), #unicode防止乱
#获取表格第二列td 属性值
res_td = r'(.*?)'
m_td = re.findall(res_td,line,re.S|re.M)
for nn in m_td:
print unicode(nn,'utf-8')
输出如下:
>>>
性別:男
性別: 男
>>>
Python 通过 re 模块提供对正则表达式的支持。使用re的一般过程是先将正则表达式的字符串形式编译成Pattern实例,然后使用Pattern实例对文本进行处理得到匹配结果(一个Match实例),最后使用Match实例获取信息并执行其他操作。
findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):搜索字符串并以列表的形式返回所有匹配的子字符串。RE的常用参数包括:
re.I(re.IGNORECASE):忽略大小写(括号内完整书写)
re.M(re.MULTILINE):多行模式,改变'^'和'$'的行为
re.S(re.DOTALL):点击任意匹配模式改变'.'的行为
-------------------------------------------------- -------------------------------------------------- --------------------------
2.获取超链接之间的内容
通常,在使用正则表达式时,需要通过分析网页链接来获取网址或网页内容。核心代码如下:
res = r'(.*?)'
mm = re.findall(res, content, re.S|re.M)
urls=re.findall(r"", content, re.I|re.S|re.M)
例子:
<p># coding=utf-8
import re
content = '''
'''
#获取<a href></a>之间的内容
print u'获取链接文本内容:'
res = r'<a .*?>(.*?)</a>'
mm = re.findall(
res, content, re.S|re.M)
for value in mm:
print value
#获取所有<a href></a>链接所有内容
print u'\n获取完整链接内容:'
urls=re.findall(r"