requests+正規表示式(二) 之 百科和京東圖片 的下載
爬取了那麼多資料資訊,今天我們換個口味,爬取圖片連結並將其下載到本地裡,下面我們來下百度百科和京東的圖片,廢話不多說,直接上案例:
案例一:爬取百度百科圖片(https://tieba.baidu.com/p/3823765471?red_tag=2142847374)
開啟這個網址我們檢查下圖片和網頁原始碼,規律如下:

2.png
觀察了圖片格式之後,我們可以開始定義函式並設定爬取的正則了:
import requests
import re
import urllib.request
#模擬成瀏覽器
headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" }
#定義爬取貼吧圖片並下載的函式 (https://tieba.baidu.com/p/3823765471)
def req_tieba_img(url):
html = requests.get(url, headers=headers)#請求頁面原始碼
html.encoding = "utf-8" #設定編碼
response = html.text #轉換成文字形式
#爬取圖片的正規表示式
reg = r'<img class="BDE_Image" src="(.*?\.jpg)"'
data = re.compile(reg, re.S).findall(response) #預編譯並執行查詢
x = 1
for img in data:
img_name = r"C:/Users/Administrator/Desktop/baike/"+ str(x) +".jpg"
print("正在寫入第 "+ str(x) +" 張圖片...")
try:
with open(img_name,"wb") as f: #將圖片儲存如本地
f.write(requests.get(img).content) #這個必須要先請求圖片而不僅僅是放入的是連結而已
except Exception as e: #即使丟擲異常對我們的重新命名圖片也沒有影響
x += 1
x += 1 #自增
#呼叫
url = "https://tieba.baidu.com/p/3823765471"
req_tieba_img(url)
我們執行爬蟲檔案之後效果如下:

3.png
案例二:爬取京東手機圖片(https://list.jd.com/list.html?cat=9987,653,655&page=頁數)
開啟網頁我們在檢查中觀察我們要抓取的圖片列表所在的區域,因為京東頁面圖片太多,因此待會兒我們爬取的時候先定位我們需要爬取的區域(注:區域定位有個開始和結束位置,並且這個兩個標誌必須唯一),然後再找個區域裡面爬取圖片,頁面觀察圖:

5.png
知道規律之後我們開始敲程式碼了:
#定義爬取京東手機圖片並下載的函式
def req_jingdong_img(url, page):
#請求頁面原始碼
html = requests.get(url, headers=headers)
html.encoding = "utf-8" #設定編碼
response = html.text #轉換成文字形式
#指定爬取的資料範圍及過濾掉部分沒必要的資訊
reg1 = r'<div id="plist".+?<div class="page clearfix">' #設定正規表示式
data1 = re.compile(reg1, re.S).findall(response) #預編譯並且執行
#抓取jpg圖片連結
reg2 = r'<img width="220" height="220" data-img="1" src="//(.*?\.jpg)"'
list_img = re.compile(reg2, re.S).findall(data1[0])
x = 1
for imgurl in list_img:
image_name = "C:\\Users\\Administrator\\Desktop\\jingdongimg\\"+ str(page) + str(x) +".jpg" #拼接下載之後圖片的名字
imgurl = "http://"+ imgurl #在瀏覽器中開啟觀察位址列中的圖片連結
print("正在寫入第 "+ str(page)+" 頁第 "+ str(x) +" 張圖片")
try:
urllib.request.urlretrieve(imgurl, filename=image_name)#這個方式自帶請求圖片
except Exception as e:
x += 1
x += 1
#呼叫
for i in range(1,67):#請求66頁的圖片
url = "https://list.jd.com/list.html?cat=9987,653,655&page="+ str(i)
req_jingdong_img(url, i)
執行之後效果圖如下:

6.png
哈哈哈,圖片爬取和下載就是這樣了,爬取網站千變萬化,但是使用的核心技術還是一個原理,希望對您有幫助,歡迎留言!
相關文章
- 正規表示式匹配html中的圖片HTML
- 匹配圖片連結地址的正規表示式
- Python大神利用正規表示式教你搞定京東商品資訊Python
- [轉載] 正規表示式
- python之正規表示式Python
- 正規表示式案例分析 (二)
- 正規表示式視訊教程免費下載
- VIM和正規表示式
- 工作學習筆記(二) 正規表示式(轉載)筆記
- java正規表示式之 groupJava
- 正規表示式之難點
- 匹配二級域名正規表示式
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- Linux之grep中的正規表示式Linux
- jmeter之關聯正規表示式和XPath ExtractorJMeter
- 京東商品圖片 自動下載 抓取 c# 爬蟲C#爬蟲
- 轉|正規表示式之匹配中文
- 前端基礎之正規表示式前端
- Python 之 RE(正規表示式)常用Python
- Python基礎之正規表示式Python
- Go 正規表示式庫之 commonregexGo
- 正規表示式
- 正規表示式.
- python基礎 之 正規表示式和re模組Python
- php之正規表示式函式總結PHP函式
- Linux 的正規表示式Linux
- 時間戳和正規表示式時間戳
- 正規表示式 字元和字元類字元
- JS常用正規表示式及驗證時間的正規表示式JS
- 正規表示式之(exp),(?:exp),(?=exp) 理解
- Python筆記五之正規表示式Python筆記
- 《JavaScript 闖關記》之正規表示式JavaScript
- 開心檔之MySQL 正規表示式MySql
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()