在上一篇寫文章沒高質量配圖?python爬蟲繞過限制一鍵搜索下載圖蟲創意圖片!中,咱們在未登陸的狀況下實現了圖蟲創意無水印高清小圖的批量下載。雖然小圖可以在一些移動端可能展現的還行,可是放到pc端展現圖片過小
效果然的是很通常!建議閱讀本文查看上一篇文章,在具體實現不作太多介紹,只講個分析思路。html
固然,本文可能技術要求不是特別高,但能夠看成一個下圖工具使用。python
環境:python3+pycharm+requests+re+BeatifulSoup+json
web
固然對於一個圖片平臺來講,高質量圖片下載多是其核心業務
,而且我看了如下,那些高質量大圖下載起來很貴!因此筆者並無嘗試付費下載而後查看大圖的地址,由於這個能夠猜測成功率很低,而且成本比較高,退而求其次,筆者採起如下幾種方法
。json
對圖蟲平臺初步分析以後,獲得如下觀點:瀏覽器
不是精選圖
,可是質量也還能夠!在圖蟲創意有個板塊的圖片是免費開放的。在共享圖片專欄。的圖片能夠搜索下載。服務器
找到一張圖片點進去,檢查地址你能夠直接訪問獲得。而有相關因素的就是一個stock.tuchong.com/topic?topic… 圖蟲創意url地址app
圖片服務器域名
+
圖片id
組成的
圖片url地址。也就是咱們要批量找到這些圖片的id。
在搜索界面查看源碼,發現這個和前面的分析一模一樣,它的
圖片id藏在js裏面。咱們只需經過正則解析。
拿到id而後拼湊url便可完成全部圖片地址,這個解析方式和上文基本徹底一致,只不過是瀏覽器的URL和js的位置有相對的變化只需小量修改,而後直接爬蟲下載保存便可!而這個搜索html的url就是
https://stock.tuchong.com/free/search/?term=
+
搜索內容
。這個下載內容的實如今上一篇已經分析過。請自行查看或看下文代碼!這樣
好的圖片都在優選圖片專欄。然而這部分圖片咱們能夠免費獲取帶水印的圖片。 在登陸帳號以後點開的圖片預覽,當你點開預覽的時候是能夠看獲得圖片的。每張圖片對應一個惟一ID,這個地址能夠得到可是比較麻煩。咱們嘗試能不能得到一個簡單通用的url
地址呢? python爬蟲
url地址共用
!也就是咱們能夠獲得這個ID經過上個url來
批量獲取下載圖片!下載圖片的方法一致不須要重複造輪子。而id的獲取方法咱們在下載高清小圖就已經詳細介紹過了也是同樣的。那麼分析就已經成功了,代碼將在後面給出,這樣咱們能夠下載帶水印的高清大圖了!
##js的解析規則:
#----
js=soup.select('script') js=js[4]
pattern = re.compile(r'window.hits = (\[)(.*)(\])')
va = pattern.search(str(js)).group(2)#解析js內容
#-------
複製代碼
固然,就配圖而言仍是高質量圖的質量高不少,若是能夠接受的話可使用。惟一缺點就是圖創水印。函數
import requests
from urllib import parse
from bs4 import BeautifulSoup
import re
import json
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Cookie': 'wluuid=66; ',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-encoding': 'gzip, deflate, br',
'Accept-language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'connection': 'keep-alive'
, 'Host': 'stock.tuchong.com',
'Upgrade-Insecure-Requests': '1'
}
def mkdir(path):
import os# 引入模塊
path = path.strip()# 去除首位空格
path = path.rstrip("\\") # 去除尾部 \ 符號
isExists = os.path.exists(path) # 判斷路徑是否存在 # 存在 True # 不存在 False
if not isExists: # 判斷結果
os.makedirs(path)# 若是不存在則建立目錄 # 建立目錄操做函數
return True#print (path + ' 建立成功')
else:
# 若是目錄存在則不建立,並提示目錄已存在
#print(path + ' 目錄已存在')
return False
def downloadimage(imageid,imgname):##下載大圖和帶水印的高質量大圖
url = 'https://weiliicimg9.pstatp.com/weili/l/'+str(imageid)+'.webp'
url2 = 'https://icweiliimg9.pstatp.com/weili/l/'+str(imageid)+'.webp'
b=False
r = requests.get(url)
print(r.status_code)
if(r.status_code!=200):
r=requests.get(url2)
with open(imgname+'.jpg', 'wb') as f:
f.write(r.content)
print(imgname+" 下載成功")
def getText(text,free):
texturl = parse.quote(text)
url="https://stock.tuchong.com/"+free+"search?term="+texturl+"&use=0"
print(url)
req=requests.get(url,headers=header)
soup=BeautifulSoup(req.text,'lxml')
js=soup.select('script')
path=''
if not free.__eq__(''):
js=js[1]
path='無水印/'
else:
js=js[4]
path='圖蟲創意/'
print(js)
pattern = re.compile(r'window.hits = (\[)(.*)(\])')
va = pattern.search(str(js)).group(2)#解析js內容
print(va)
va = va.replace('{', '{').replace('}', '},,')
print(va)
va = va.split(',,,')
print(va)
index = 1
for data in va:
try:
dict = json.loads(data)
print(dict)
imgname='img2/'+path+text+'/'+dict['title']+str(index)
index+=1
mkdir('img2/'+path+text)
imgid=dict['imageId']
downloadimage(imgid,imgname)
except Exception as e:
print(e)
if __name__ == '__main__':
num=input("高質量大圖帶水印輸入1,普通不帶水印輸入2:")
num=int(num)
free=''
if num==2:
free='free/'
text = input('輸入關鍵詞:')
getText(text,free)
複製代碼
這樣,整個流程就完成了,對於目錄方面,我也對圖蟲有水印的和沒水印的進行了區分,供你們使用。在使用方面,先輸入1或2(1表明有水印高質量圖,2表明共享圖),在輸入關鍵詞便可批量下載。 工具
最後,若是感受能夠的話歡迎點讚唄!歡迎關注筆者公衆號:bigsai
IT圈不嫌多一個朋友,筆者也但願能成爲你的朋友,
共同窗習,共同進步!