Python爬蟲案例:爬取百度圖片

来源:https://www.cnblogs.com/huohuohuo1/archive/2018/05/19/9061973.html
-Advertisement-
Play Games

糾結於爬取百度圖片,竟然花費了一天的時間才讓程式順利跑起來。其中踩坑無數。而且還發現公司電腦實在是比較差勁。。。 ...


糾結於爬取百度圖片,竟然花費了一天的時間才讓程式順利跑起來。其中踩坑無數。而且還發現公司電腦實在是比較差勁。。。

1 import requests
2 import urllib  
3 import os , re
4 from os.path import join 
5 import time
 1 def getPages(keyword,pages=5):  
 2     params = []  
 3     for i in range(30, 30*pages+30, 30):  
 4         # 通過網上資料,可以使用 requests.get() 解析 json 數據,能夠得到對應 url
 5         # 其中一個坑是,原來並不是以下的每個數據都是需要的,某些不要也可以!
 6         # Python學習交流群125240963每天更新資料視頻,大牛指導
 7         params.append({  
 8                       'tn': 'resultjson_com',  
 9                       'ipn': 'rj',  
10                       'ct': 201326592,  
11                       'is': '',  
12                       'fp': 'result',  
13                       'queryWord': keyword,  
14                       'cl': 2,  
15                       'lm': -1,  
16                       'ie': 'utf-8',  
17                       'oe': 'utf-8',  
18                       'adpicid': '',  
19                       'st': -1,  
20                       'z': '',  
21                       'ic': 0,  
22                       'word': keyword,  
23                       's': '',  
24                       'se': '',  
25                       'tab': '',  
26                       'width': '',  
27                       'height': '',  
28                       'face': 0,  
29                       'istype': 2,  
30                       'qc': '',  
31                       'nc': 1,  
32                       'fr': '', 
33                       'pn': i,  
34                       'rn': 30,  
35                       #'gsm': '1e',  
36                       #'1488942260214': '' 
37                   })  
38     url = 'https://image.baidu.com/search/acjson'  
39     urls = []  
40     for param in params: 
41         # url 與 param 合成完整 url  
42         urls.append(requests.get(url,param,headers = headers,timeout = 3).url)     # 
43     #print (urls)
44     return urls  
 1 def get_Img_url(keyword,pages=5):
 2     # 每頁的 URL 集合
 3     pageUrls = getPages(keyword,pages)             
 4     # 圖片url : "thumbURL":"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1789805203,3542215675&fm=27&gp=0.jpg"
 5     # 正則寫的很差!
 6     exp = re.compile(r'"thumbURL":"[\:\,\_\w\d\=\.\+\s\/\%\$\&]+\.jpg')
 7     imgUrls = []
 8     for url in pageUrls:
 9         # 逐個讀取每頁 URL
10         # Python學習交流群125240963 每天更新資料大牛指導
11         try:
12             with urllib.request.urlopen(url,timeout = 3) as pageUrl:
13                 imgUrl = pageUrl.read().decode('utf-8') 
14                 urls = re.findall(exp,imgUrl)
15                 for url in urls:
16                     # 除去 thumbURL":"
17                     imgUrls.append(url.replace('"thumbURL":"',''))
18         # 正則提取 ImgUrl
19         except:
20             print('SomePage is not opened!')           
21             continue
22     # 所有照片的 urls
23     return imgUrls
 1 def getImg(urlList,localPath):  
 2     if not os.path.exists(localPath):  
 3         os.makedirs(localPath)  
 4     x = 1 
 5     for url in urlList:
 6         # 將 for 迴圈寫在 try 外面
 7         try: 
 8             # 什麼時候應該轉義?這點還沒弄明白
 9             # 沒有打開特定文件夾!
10             with open(keyword+str(x)+'.jpg','wb') as f:        # 原本寫 ‘\.jpg’ 會出錯,列印 \\.jpg
11                 img = urllib.request.urlopen(url,timeout = 3).read()
12                 f.write(img)
13             print('%d.jpg is downloaded!' % x)
14             x += 1
15         except Exception:  
16             print("\n  Failed downloading NO. %d image\n" % x)
1 if __name__ == '__main__':
2     keyword = '美女'
3     pages = 500
4     localPath = 'F:/pythonCode/day1001/'
5     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
6     urlList = get_Img_url(keyword,pages)
7     getImg(urlList,localPath)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 案例 我們所熟悉的jbdc是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,提供了一種基準,據此可以構建更高級的工具和介面。 如上圖所示,任意的一個資料庫廠商只要去實現jdbc的介面,就可以輕鬆的對接jbdc從而為應用開發人員所服務。 SPI 上面的jdbc的設計理念叫S ...
  • 一提到負載均衡,相信很多同學都直接會想到nginx反向代理,因為我們平時比較熟悉的就是用nginx做web服務的負載均衡。其實nginx只是負載均衡里的一部分,在web應用中的每個層級其實都涉及到負載均衡。 那麼何為負載均衡?這個概念其實也同樣很重要,很多同學又說了,負載均衡還不簡單,就是在分散式系 ...
  • 什麼是session? 由於HTTP協議是無狀態的協議,因此它不會去記住上一次瀏覽器訪問伺服器時的信息。同一個用戶的兩次操作,與兩個不同用戶的操作,對它來說是一樣的。 這樣雖然滿足了互聯網web應用的海量訪問的需求,但是對於現今類似電商的應用來說,是需要實現登錄以及身份驗證需求的,但是無狀態的HTT ...
  • AOP
    AOP(Aspect-Oriented Programming),面向切麵編程。 一些系統層面的服務(例如安全、日誌、事務),這些與業務邏輯無關的服務如果直接寫在業務流程中,這樣會使得業務流程到處都是這些服務代碼,繁瑣難維護,混淆業務本身的職責,還不容易剔除。 AOP的編程思想,是與業務邏輯無關的動 ...
  • 虛擬代理模式-Virtual Proxy 虛擬代理模式(Virtual PRoxy)會推遲真正所需對象實例化時間. 在需要真正的對象工作之前, 如果代理對象能夠處理, 那麼暫時不需要真正對象來出手. 優點: 這種方法的優點是,在應用程式啟動時,由於不需要創建和裝載所有的對象,因此加速了應用程式的啟動 ...
  • Cookie在工作中的使用,最近項目寫到了用戶瀏覽商品模塊,用到了cookie對象,把我對cookie的認識分享給大家。cookie簡稱小餅干,大家應該知道吧,cookie屬於存儲在客戶端,也就是瀏覽器端,它儲存的大小是有限制的,根據各個瀏覽器不同大小也不同。下麵是商城的瀏覽記錄模塊的技術實現。 首 ...
  • 使用google-gson類庫解析json文件 使用JsonParser解析器來解析字元串和輸入流,變成json對象 代碼如下: ...
  • 引言: 都說,滴水穿石非一日之功。然而有些人即使奮鬥一輩子也比不上別人一年,別人學習一年比不得你學習一個月。其中緣由,有些人看了大半輩子還沒看明白。 即使Python這麼火,為何你學習一年的Python還找不到工作? 我認為有以下四點非常關鍵: 1,功利心強: 急需賺錢之人,所以才會著重強調“賺錢” ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...