Python3+urllib爬取海量精美圖片


下載Python3:https://www.python.org/


安裝的時候記得勾選添加環境變量


本代碼參考瞭網上的一些教程,我又根據自己的理解簡化瞭代碼:


import re,os,random
import urllib.request

os.mkdir('mm')
os.chdir('mm')

#請求頭
head={}
head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'

#設置網站起始頁碼
cou=2350
while True:
strcou=str(cou)
cou=cou+1
#網站首頁地址
url2='http://jandan.net/ooxx/'+strcou+'#comments'
a=urllib.request.Request(url2,data=None,headers=head)
res=urllib.request.urlopen(a).read().decode('utf-8')
#正則表達式匹配網址
a=re.findall(r'//wx+.+?.jpg',res)
#去掉列表中重復的網站點
ll=list(set(a))
#計算列表中有多少個網站
b=len(ll)
c=b-1
while True:
#隨機生成兩個數字用於圖片命名
cc=str(random.randint(1,200))
dd=str(random.randint(1,200))
#這個是圖片地址
url='http:'+a[c]
resp=urllib.request.Request(url,data=None,headers=head)
res=urllib.request.urlopen(resp).read()
#保存圖片
with open(cc+dd+'.jpg','wb') as f:
f.write(res)
c-=1
if c==0:
break

導入必要的模塊


import re,os,random

import urllib.request

在當前工作目錄創建文件夾,名字為mm


os.mkdir('mm')
os.chdir('mm')

#請求頭,如果不加請求頭的話,服務器就會判定這是一個非人類訪問。訪問一些網站將會被服務器拒絕


head={}
head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'




如下就是不加請求頭的報錯:



#設置網站起始頁碼 網站原始首頁http://jandan.net/ooxx/page-2379#comments



2379就是包含在網站裡的頁碼,改變這個數字,瀏覽器顯示的圖片就不一樣瞭,就是利用這一點,就可以每一次循環改變網站的地址

獲取不同的圖片

cou=2379

第一個循環代表獲取不同的圖片
while True:

    #cou是數字類型,需要把它轉換成字符類型填寫在網址中
strcou=str(cou)

    #每一次循環訪問頁面,就在原來的頁碼上加1
cou=cou+1
#網站首頁地址


url2='http://jandan.net/ooxx/'+strcou+'#comments'
a=urllib.request.Request(url2,data=None,headers=head)
res=urllib.request.urlopen(a).read().decode('utf-8')
#正則表達式匹配網址,獲取該頁面所有以//wx開頭以.jpg結尾的url,這個url就是圖片的地址


a=re.findall(r'//wx+.+?.jpg',res)
#去掉列表中重復的網站點
ll=list(set(a))
#計算列表中有多少個網站
b=len(ll)
c=b-1

第二個循環代表獲取頁面的url:

    while True:
#隨機生成兩個數字用於圖片命名
cc=str(random.randint(1,200))
dd=str(random.randint(1,200))
#這個是圖片地址
url='http:'+a[c]
resp=urllib.request.Request(url,data=None,headers=head)
res=urllib.request.urlopen(resp).read()
#保存圖片
with open(cc+dd+'.jpg','wb') as f:
f.write(res)
c-=1
if c==0:
break

爬取的圖片:


0 個評論

要回覆文章請先登錄註冊