Python使用正則表達式獲取網頁中所需要的信息
使用正則表達式的幾個步驟:
1、用import re 導入正則表達式模塊;
2、用re.compile()函數(shù)創(chuàng)建一個Regex對象;
3、用Regex對象的search()或findall()方法,傳入想要查找的字符串,返回一個Match對象;
4、調用Match對象的group()方法,返回匹配到的字符串。
在交互式環(huán)境中簡單嘗試一下,查詢字符串中的固話:
import re
text = '小明家的固話是0755-123456,而小麗家的固話時0789-654321,小王家的電話是123456789'#用于檢測的字符串
ph_re = re.compile(r'\d{4}?-\d+') #創(chuàng)建Regex對象,匹配幾種電話的方式,\d表示0-9的數(shù)字,{4}表示前面的匹配4次,?表示可選,+表示出現(xiàn)1次或多次。
matchs1 = ph_re.findall(text) #findall()表示查找所有匹配項,返回一個字符串
matchs2 = ph_re.search(text)#search(),查找第一次匹配的文本,返回一個對象。
print(matchs1)
print(matchs2)
matchs2.group()
返回的結果,是這樣的:
findall()方法返回的是一個字符串,可以直接打印出來。而search()方法返回的是一個對象,所以打印出來的是是如圖的第二行。
調用group(),對象返回匹配的結果。
最后,小王的電話之所以沒有匹配到,是因為'-'沒有進行可選即在其后加上‘?'。
下面進行一個小的實驗,獲取某個網頁中所有的http/https網址,并計算有多少個。
首先是獲取HTML文件。這里要用到requests模塊。
# -*- coding: utf-8 -*- import requests import re def get_html(url): res = requests.get(url) res.encoding = 'utf-8' html = res.text return html
這里get_html函數(shù)返回的,其實就類似上面例子中的text,用來匹配的文本。
然后,創(chuàng)建正則表達式:
def get_addr(response):
addr_regex = re.compile(r'''(
(http://|https://)? #http/https
(www)?
(\.[a-z1-9A-Z]+)
(\.com|\.cn)
)''',re.VERBOSE)#匹配網址,
matchs = []
for groups in addr_regex.findall(response):
matchs.append(groups[0])
if len(matchs) == 0:
print('沒有網址')
return matchs
這里向re.compile(),傳入變量re.VERBOSE,作為第二個參數(shù),可以將正則表達式放在多行,并進行注釋,如上。
返回一個matchs列表對象。
再來個啟動函數(shù)。
def start():
url = 'http://news.163.com/18/0127/18/D966K4CO0001899N.html'
a = get_html(url)
b = get_addr(a)
print('\n'.join(b))
print(str(len(b)))
print('ok')
if __name__ == '__main__':
start()
這里傳入的url是我隨意找的一個新聞鏈接。
然后調用get_html()和get_addr(),就得到了想要的東西。str(len(b)),為統(tǒng)計的數(shù)量。
測試的結果是類似這樣的:
這里似乎獲取一些URL,沒什么卵用。。。但是,如果結合前面的查詢新聞列表的方式,獲取批量url,
而創(chuàng)建的正則是xxx.jpg,然后調用os模塊,os.mkdir(folder)、os.chdir(folder),將獲取到的匹配結果寫入文件,放入某個文件夾。
那么就可以實現(xiàn),從某些網站上批量獲取jpg圖片,然后存入某個文件夾的爬蟲功能。實測,可行!
總結
以上所述是小編給大家介紹的Python使用正則獲取網頁中所需要的信息,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
python 給DataFrame增加index行名和columns列名的實現(xiàn)方法
今天小編就為大家分享一篇python 給DataFrame增加index行名和columns列名的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python實現(xiàn)將多張圖片合成視頻并加入背景音樂
這篇文章主要為大家介紹了如何利用Python實現(xiàn)將多張圖片合成mp4視頻,并加入背景音樂。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-04-04

