这篇文章主要是介绍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)forscriptinm_script:res_original=r''original':'(.*?)''#原图m_original=re.findall(res_original,script)forpic_urlinm_original:printpic_urlfilename=os.path.basename(pic_url)#去掉目录路径,返回文件名urllib.urlretrieve(pic_url,'E:\\'+filename)#下载图片
运行结果如下图所示,同时下载图片至E盘。
参考文章:
/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-8importosimportrevalue='''tableclass='infobox'style='width:21em;text-align:left;'cellpadding='3'>trbgcolor='#CDDBE8'>thcolspan='2'>centerclass='role'>b>中華民國政治人士b>br/>center>th>tr>tr>th>性別:th>td>男td>tr>tr>th>政黨:th>td>spanclass='org'>imgalt='中國國民黨'src='../../../../images/Kuomintang.svg.png'width='19'height='19'border='0'/>ahref='../../../../articles/%8B%E6%B0%91%E9%BB%A8.html'title='中國國民黨'>中國國民黨a>span>td>tr>table>'''value=re.sub('[^>]+>','',value)#过滤HTML标签printvalue
输出如下:
>>>中華民國政治人士性別:男政黨:中國國民黨>>>
虽然仅仅包括汉字,但是中间会存在换行,需要过滤
即可:
if'
'invalue:value=value.replace('
','')value=value.replace('\n','')value=re.sub(']+>','',value)#过滤HTML标签printvalue#输出仅仅一行如下:#中華民國政治人士性別:男政黨:中國國民黨
下面讲述第二部分,通过正则表达式获取中的src超链接,代码如下:
test='''
'''printre.findall('src='(.*?)'',test)
输出如下所示:
>>>['../images/Kuomintang.png']>>>
findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,即findall中返回列表中每个元素包含的信息。
最后希望文章对你有所帮助,后面如果遇到新的相关知识,我也会即使的更新添加的。— END —