Python爬蟲之使用正則表示式抓取資料
阿新 • • 發佈:2018-11-14
目錄
相關文章:Linux中的正則表示式
例項:
匹配標籤
匹配title標籤
匹配網頁的 <title></title> 標籤,也就是網頁的標題。 .*? 就是匹配1個或多個字元,也就是這裡不能是空的。當加入括號的話,就是代表取值了 (.*?)
import re import requests resp=requests.get("http://www.baidu.com") resp.encoding="utf-8" #設定編碼格式為utf-8 html=resp.text title=re.findall(r'<title>.*?</title>',html) #匹配 <title></title> for t in title: print(t) title_value=re.findall(r'<title>(.*?)</title>',html) #匹配 <title></title>裡面的內容 for t in title_value: print(t) ##################################################################### <title>百度一下,你就知道</title> 百度一下,你就知道
a標籤
匹配<a href="" ></a> ,並且獲取a標籤裡面的內容
import re import requests resp=requests.get("http://www.baidu.com") resp.encoding="utf-8" #設定編碼格式為utf-8 html=resp.text urls = re.findall(r"<a.*?>.*?<\/a>", html) #匹配所有的a標籤 for u in urls: print(u) texts = re.findall(r"<a.*?>(.*?)</a>", html) #獲取超連結<a>和</a>之間內容 for t in texts: print(t) ####################################################################################### <a href=http://news.baidu.com name=tj_trnews class=mnav>新聞</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地圖</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>視訊</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>貼吧</a> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登入</a> <a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登入</a> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多產品</a> <a href=http://home.baidu.com>關於百度</a> <a href=http://ir.baidu.com>About Baidu</a> <a href=http://www.baidu.com/duty/>使用百度前必讀</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意見反饋</a> 新聞 hao123 地圖 視訊 貼吧 登入 登入 更多產品 關於百度 About Baidu 使用百度前必讀 意見反饋
table標籤
抓取 <table></table> 表格中的內容。
假設現在有這麼一個網頁
<html>
<table class="table">
<tr>
<th>姓名</th>
<th>性別</th>
</tr>
<tr>
<td>小謝</td>
<td>男</td>
</tr>
<tr>
<td>小紅</td>
<td>女</td>
</tr>
</table>
</html>
匹配程式碼
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #設定編碼格式為utf-8
html=resp.text
#匹配table標籤
tables=re.findall(r"<table.*?>.*?<\/table>",html,re.M|re.S)
for table in tables:
print(table)
#匹配<tr></tr>之間的內容
trs=re.findall(r"<tr>(.*?)</tr>",html,re.S|re.M) #因為<tr>標籤大多數不是在同一行,所以要加 re.S和re.M多行匹配
for tr in trs:
print(tr)
#匹配<th></th>之間的內容
for row in trs:
ths=re.findall(r"<th>(.*?)</th>",row,re.S|re.M)
for th in ths:
print(th)
#匹配<td></td>之間的內容
for row in trs:
tds=re.findall(r"<td>(.*?)</td>",row,re.S|re.M)
for td in tds:
print(td)
##################################################################################
<table class="table">
<tr>
<th>姓名</th>
<th>性別</th>
</tr>
<tr>
<td><B>小謝</B></td>
<td>男<br/></td>
</tr>
<tr>
<td><B>小紅</B></td>
<td>女<br/></td>
</tr>
</table>
<th>姓名</th>
<th>性別</th>
<td>小謝</td>
<td>男</td>
<td>小紅</td>
<td>女</td>
姓名
性別
小謝
男
小紅
女
匹配標籤裡面的屬性
匹配a標籤裡面的URL
假如現在有網頁
<html>
<a href="http://www.baidu.com">百度一下,你就知道</a>
<a href="http://www.mi.com">小米官網</a>
</html>
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #設定編碼格式為utf-8
html=resp.text
urls=re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')",html,re.I|re.S|re.M) #匹配 href=""
for url in urls:
print(url)
###################################################################################
http://www.baidu.com
http://www.mi.com
匹配img標籤裡的 src
加入現在有網頁
<html>
<img src="http://t1.27270.com/uploads/tu/201811/310/f3e9db6b68.jpg" name="美女"/>
<img src="http://t1.27270.com/uploads/tu/201811/229/ea7fda100e.jpg" />
</html>
匹配程式碼:
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #設定編碼格式為utf-8
html=resp.text
srcs=re.findall(r'src="(.*?)"',html,re.I|re.S|re.M)
for src in srcs:
print(src)
##################################################################
http://t1.27270.com/uploads/tu/201811/310/f3e9db6b68.jpg
http://t1.27270.com/uploads/tu/201811/229/ea7fda100e.jpg
#假如要獲取圖片的名字,也就是上面的 f3e9db6b68.jpg 或者 ea7fda100e.jpg
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #設定編碼格式為utf-8
html=resp.text
srcs=re.findall(r'src="(.*?)"',html,re.I|re.S|re.M)
for src in srcs:
name=src.split("/")[-1]
print(name)
##################################################################
f3e9db6b68.jpg
ea7fda100e.jpg