當前位置:
首頁 >
爬虫练习3 爬取堆糖网校花照片
發布時間:2023/12/15
53
豆豆
生活随笔
收集整理的這篇文章主要介紹了
爬虫练习3 爬取堆糖网校花照片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知識點:
多線程的實現
圖片的下載及寫入
字符串高級查找
了解動態加載和json
request 的用法 獲取數據的api
'https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000'
圖片路徑
"path": "https://b-ssl.duitang.com/uploads/item/201509/18/20150918195615_JfdKm.jpeg"
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: benjaminYangimport requests,threading import urllib.parse#設置最大線程 開啟30個線程就鎖住 thread_lock=threading.BoundedSemaphore(value=50)'https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000' #通過url 獲取數據 def get_page(url):#requests.get 自帶了json.loadspage=requests.get(url)page=page.content# 將bytes轉成 字符串page=page.decode('utf-8')return pagedef pages_from_duitang(label):pages=[]url='https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}&limt=1000'#將中文轉成url編碼label=urllib.parse.quote(label)#0-3600 步長100for index in range(0,3600,50):#將這兩個變量替換占位符{}u=url.format(label,index)page=get_page(u)pages.append(page)return pages# print(get_page('https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000'))# 單個頁面的對象,startpart 所要匹配字符1,匹配的字符2 def findall_in_page(page,startpart,endpart):all_strings=[]end=0# -1代表找不到 意思就是匹配到就執行循環while page.find(startpart,end) !=-1:#匹配第一個字符,從下標0開始匹配到的位置下標,并將字符長短傳給start變量start=page.find(startpart,end)+len(startpart)# 將從第一個需要匹配的字符串后面的字符開始,匹配第二個需要匹配的字符出現的位置,并將這個下標值賦給end變量end=page.find(endpart,start)#切片 取兩個所要匹配字符 之間的部分也就是圖片urlstring=page[start:end]#存入列表 all_strings.append(string)return all_strings# "path": "https://b-ssl.duitang.com/uploads/item/201708/20/20170820215827_fa483.jpeg" def pic_urls_from_pages(pages):pic_urls=[]for page in pages:urls=findall_in_page(page,'path":"','"')pic_urls.extend(urls) # 合并列表return pic_urlsdef download_pics(url,n):r=requests.get(url)path='pics/'+ str(n) + '.jpg'with open(path,'wb') as f:f.write(r.content)#下載完了,解鎖 thread_lock.release()def main(label):pages=pages_from_duitang(label)pic_urls=pic_urls_from_pages(pages)n=0for url in pic_urls:n +=1print('正在下載第{}張圖片'.format(n))#上鎖 thread_lock.acquire()#下載 這個方法丟進線程池t=threading.Thread(target=download_pics,args=(url,n))t.start()main('校花')
?
?此學習資源來自--潭州Python學院
轉載于:https://www.cnblogs.com/benjamin77/p/7966346.html
總結
以上是生活随笔為你收集整理的爬虫练习3 爬取堆糖网校花照片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决策树挑出好西瓜
- 下一篇: 富士色彩配方咖啡馆在上海开业;万代南梦宫