接下來給大家分享一下常用的正則表達式抓取網絡數據的一些技巧。
抓取標簽間的內容
我們前幾篇文章給大家分享了urllib模塊和requests模塊是用來獲取網絡資源的兩個模塊,而我們獲取的網絡資源出了json的之外,都是跟HTML標簽打交道。我們往往要做的就是獲取標簽的內容。比如我們獲取一下百度的title標題:
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 此處使用findall結合正則表達式完成
title = re.findall(r'', content)
print(title[0])
抓取超鏈接標簽間的內容
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 定義正則表達式獲取所有網頁的超鏈接
res = r"<a.*?href=.*?<\ a="">"
urls = re.findall(res, content)
for u in urls:
print(u)
當然如果想獲取超鏈接中的內容我們也可以使用正則表達式,只不過使用了分組的內容就是()
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
#獲取超鏈接和之間內容
res = r'(.*?)'
texts = re.findall(res, content, re.S|re.M)
for t in texts:
print(t)
觀察結果:
抓取標簽中的參數
HTML超鏈接的基本格式為“鏈接內容”,現在需要獲取其中的URL鏈接地址,方法如下:
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 定義正則表達式獲取所有網頁的超鏈接
res = r"<a.*?href=.*?<\ a="">"
urls = re.findall(res, content)
# 將所有的超級鏈接拼接成字符串
all_urls = '\n'.join(urls)
# 定義正則表達式
res = r"(?<=href=)http:.+?(?=\>)|(?<=href=)http:.+?(?=\s)"
# 查找符合規則的超級鏈接
urls = re.findall(res, content, re.I|re.S|re.M)
for url in urls:
print(url)
抓取圖片超鏈接標簽的URL
HTML插入圖片使用標簽的基本格式為“”,則需要獲取圖片URL鏈接地址,下面???案例不僅獲取的圖片鏈接而且將圖片保存到了本地。
import re
import requests
# 從網絡獲取一張圖片的html標簽
# 使用正則表達式獲取src后面的內容
m = re.match(r'
print(m.group(1))
image_path = m.group(1)
# 如果想下載獲取的圖片鏈接我們結合requests和文件保存完成
response = requests.get(image_path)
# 獲取響應信息的內容
result = response.content
# 獲取圖片名稱
filename = image_path[image_path.rfind('%')+1:]
path = os.path.join(r'images', filename)
# 保存到本地將圖片
with open(path, 'wb') as wstream:
wstream.write(result)
print('文件下載結束!')