初級爬蟲(一) requests模組實現網頁批量圖片爬取
阿新 • • 發佈:2018-12-28
思路分析:
已知網頁:如http://www.jiangxian.gov.cn/N20180821093426.html
1, 檢查網頁分析網頁中圖片的地址形式,
2,獲取網頁內容,正則匹配出所有圖片的地址,
3,拼接地址生成列表
4,迴圈列表,生成圖片地址的文字檔案
5,迴圈列表,取出每個地址,獲得地址內容
6,寫入到資料夾
難點:首先是獲取每個圖片的地址____這是一個獲取過程
再次 獲取圖片____相當於獲取另一個網頁的過程
程式碼如下:
import requests import re #請求頭 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" } #基礎地址 url = "http://www.jiangxian.gov.cn/N20180821093426.html" #從網頁右鍵檢檢視到的圖片地址格式 # <P align=center><IMG src="/upload/20180821100128526.jpg"></P> #正則分析: src="(/upload/.*?) #初次獲取原始網頁內容 response = requests.get(url, headers=headers) #輸出網頁內容 htm = response.content.decode('gbk') #在網頁內容中匹配圖片的標籤(注意正則的引號,外單內雙) list1 = re.findall('src="(/upload/.*?)"', htm) #拼接圖片真實地址,可以在瀏覽器中點選圖片檢視地址拼接形式,列表推導式 list2 = ['http://www.jiangxian.gov.cn/' + i for i in list1] #將地址儲存成文字,注意需要迴圈遍歷 with open('tu/tu.txt', 'w')as f: for t in list2: f.write(t+'\n') #然後繼續遍歷列表2, 重新獲取網頁內容,分別提取每個網頁的內容輸出成圖片 for u in list2: resp = requests.get(u, headers=headers) img = resp.content #命名 (難點是字串和int型別的值之間的轉換) name = 'tu' + str(list2.index(u)) + '.jpg' # print(name)測試 #拼接圖片庫地址 path = './tu/' + name File = open(path, 'wb') File.write(img) File.flush() File.close() #寫入的另一種形式 # with open(path, 'wb')as w: # w.write(img)
#問題: 怎麼實現邊讀取邊寫入?執行發現是全部讀取完後一次性寫入 ,不科學啊 ,目前不知道怎麼解決
結果