本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者 何以為孤
以下文章來源于
https://blog.csdn.net/weixin_43908900/article/details/97960333
爬蟲之蜂鳥網圖片爬取
今天分析一波蜂鳥網,話不多說,先來一波網址
url =“ http://image.fengniao.com/index.php#p=1
首先一個美女圖片瞧瞧,
分析一波網頁,找到網站的分頁特點,該網站請求方式為ajax請求,那么各位看官瞧仔細了,F12打開,滑鼠轱轆往下翻,你會發現:
有什么發現么,頁數變為2,還有一堆資訊,點擊右邊第一個鏈接訪問,一個新大陸在你眼前:
沒錯,該網頁格式回傳為json格式,還有一個高大上的名字====》該網站“API”,是不是有點小激動,相信如果學習過這方面知識的小伙伴可以自行發現搓掌敲代碼了,好,今天就到此結束了,
你看到這里,小編甚是高興!那么接下來還是搞事情的節奏,光有資料不行呀,我們需要的是圖片,,,,
下面開始上代碼:
最好有一些面型物件以及執行緒的知識,這樣對下面代碼好理解!
import threading
import time
import json
import re
import requests
import os
imgs_url_list = []
# 圖片操作鎖
imgs_lock = threading.Lock()
'''繼承threading.Thread'''
class Product(threading.Thread):
'''初始化'''
def __init__(self):
super(Product, self).__init__(self)
self.__headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
"Referer": "http://image.fengniao.com/",
"Host": "image.fengniao.com",
"X-Requested-With": "XMLHttpRequest"
}
self.__start = "http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page={}?_in_id={}"
def run(self):
index = 2 #起始頁數
not_in = "5352384,5352410"
while index < 1000:
url = self.__start.format(index,not_in)
# print('開始操作:%s' %url)
print('開始操作:{}'.format(url))
index += 1
content = requests.get(url,headers = self.__headers).text
if content is None:
print('ok,沒有你的東西了,客官請回,,,,,')
continue
time.sleep(3)
json_content = json.loads(content)
# print(json_content)
if json_content['status'] == 1:
for item in json_content['data']:
title = item['title']
child_url = item['url']
'''圖片鏈接'''
img_content = requests.get(child_url,headers=self.__headers).text
#這里需要解釋一下,為什么設定匹配pic_url_1920_b后面的,你可以自行print=>img_content,自會曉得
pattern = re.compile('"pic_url_1920_b":"(.*?)"')
imgs_json = pattern.findall(img_content)
# print(imgs_json)
if len(imgs_json) > 0:
imgs_lock.acquire()
'''查詢的時候方便'''
imgs_url_list.append({'title': title, 'url': imgs_json})
imgs_lock.release()
class Consumer(threading.Thread):
def __init__(self):
super(Product, self).__init__(self)
self.__headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
"Referer": "http://image.fengniao.com/",
"Host": "image.fengniao.com",
"X-Requested-With": "XMLHttpRequest"
}
def run(self):
while True:
if len(img_list) <= 0:
continue # 進入下一次回圈
if imgs_lock.acquire():
data = https://www.cnblogs.com/hhh188764/archive/2020/10/13/img_list[0]
del img_list[0] # 洗掉第一項
imgs_lock.release()
# print(data)
'''雙\其實是轉義后面斜杠,要不會報錯'''
urls =[url.replace("\\","") for url in data["url"]]
# print(urls)
# 創建檔案目錄
os.makedirs('./image/', exist_ok=True)
for item_url in urls:
try:
# print(item_url)
# file = requests.get(item_url,headers = self.__headers,timeout=2)
file = requests.get(item_url)
time.sleep(2)
# print(file.status_code)
# print(item_url)
with open('./image/{}.jpg'.format(str(time.time())),'wb') as f:
f.write(file.content)
except Exception as e:
print(e)
if __name__ == '__main__':
p = Product()
p.start()
c = Consumer()
c.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/171244.html
標籤:其他
