分享

Python爬虫常用正则表达式及HTML网页标签分析总结

 过河卒冲 2018-11-17




这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法。它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~

当然如果会Selenium基于自动化测试爬虫、BeautifulSoup分析网页DOM节点,这就更方便了,但本文更多的是介绍基于正则的底层爬取分析。


涉及内容如下:


常用正则表达式爬取网页信息及HTML分析总结


1.获取标签之间内容


2.获取超链接之间内容


3.获取URL最后一个参数命名图片或传递参数


4.爬取网页中所有URL链接


5.爬取网页标题title两种方法


6.定位table位置并爬取属性-属性值


7.过滤等标签


8.获取'  
m_script = re.findall(html_script,content,re.S|re.M)  
for script in m_script:
    res_original = r''original':'(.*?)'' #原图
    m_original = re.findall(res_original,script)
    for pic_url in m_original:
        print pic_url
        filename = os.path.basename(pic_url) #去掉目录路径,返回文件名
        urllib.urlretrieve(pic_url, 'E:\\'+filename) #下载图片


运行结果如下图所示,同时下载图片至E盘。


参考文章:


https://blog.csdn.net/eastmount/article/details/44492787



9.通过replace过滤
标签


在获取值过程中,通常会存
标签,它表示HTML换行的意思。常用的方法可以通过标签'<'和'>'进行过滤,但是这里我想讲述的是一种Python常用的过滤方法,在处理中文乱码或一些特殊字符时,可以使用函数replace过滤掉这些字符。核心代码如下:


    if '
' in value:

        value = value.replace('
','')   #过滤该标签

        value = value.replace('\n',' ')     #换行空格替代 否则总换行


例如过滤前后的例子:


達洪阿 異名: (字) 厚菴
(諡) 武壯
(勇號) 阿克達春巴圖魯

達洪阿 異名: (字) 厚菴 (諡) 武壯 (勇號) 阿克達春巴圖魯


10.获取中超链接及过滤标签


在获取值属性值过程中,可能在分析table/tr/th/td标签后,仍然存在图片链接,此时在获取文字内容时,你可能需要过滤掉这些标签。这里采用的方法如下:


        value = re.sub('<[^>]+>','', value)


例如:


#encoding:utf-8
import os
import re

value = '''
table class='infobox' style='width: 21em; text-align: left;' cellpadding='3'>
tr bgcolor='#CDDBE8'>
th colspan='2'>
center class='role'>b>中華民國政治人士b>br />center>
th>
tr>
tr>
th>性別:th>
td>td>
tr>
tr>
th>政黨:th>
td>span class='org'>
img alt='中國國民黨' src='../../../../images/Kuomintang.svg.png' width='19' height='19' border='0' />
a href='../../../../articles/%8B%E6%B0%91%E9%BB%A8.html' title='中國國民黨'>中國國民黨a>span>td>
tr>
table>
'''

value = re.sub('[^>]+>','', value) #过滤HTML标签
print value


输出如下:


>>

中華民國政治人士

性別:


政黨:

中國國民黨

>>>


虽然仅仅包括汉字,但是中间会存在换行,需要过滤
即可:


if '' in value:
    value = value.replace('','')
    value = value.replace('\n',' ')
value = re.sub('<[^>]+>',''value#过滤HTML标签
print value

#输出仅仅一行如下: 
#中華民國政治人士    性別: 男   政黨:   中國國民黨 


下面讲述第二部分,通过正则表达式获取中的src超链接,代码如下:


test = ''''''
print re.findall('src='(.*?)'',test) 


输出如下所示:


>>>    
['../images/Kuomintang.png']
>>>


findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,即findall中返回列表中每个元素包含的信息。


最后希望文章对你有所帮助,后面如果遇到新的相关知识,我也会即使的更新添加的。



  —  END —

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多