python爬取鬥圖啦表情包並下載到本地

四年發表於2018-12-25

迫於無聊,又剛好正在學習python,就來記錄一篇關於python爬取圖片連結下載本地的入門文章...

主要用到的模組: requestBeautifulSoup4 開發之前建議先看一下官方給出關於這兩個模組的文件

開發環境:

  • python3.6.6
  • vscode
  • node v8.10

不同的python版本在部分程式碼上可能會有差異,請務必核對好版本...

開發流程解析

第一步:需要通過request獲取頁面的原始碼
response = requests.get(url, headers=header, timeout=30)
複製程式碼
第二步:分析頁面結構

QQ截圖20181225105322.png

通過上圖發現,他的每一個img標籤的class都是img-responsive lazy image_dta

那麼我們就可以直接通過bs4的find_all屬性將其取出...

datas = soup.find_all(
        name="img", attrs={"class": "img-responsive lazy image_dta"})
複製程式碼

因為find_all取出的是一個陣列,那麼我們就需要去進行迴圈讀取每個img標籤

for data in datas:
        print("downloading:", data.attrs['data-original'])
        request.urlretrieve(
            data.attrs['data-original'], downPath+'\%s.jpg' % time.time())
複製程式碼

這邊用的是request.urlretrieve進行資源下載...

需要注意的是,一般來講我們都是去獲取圖片的src屬性,但是由於這個網站使用了圖片延時載入,所以我們直接獲取src的話就取到他預設的圖片,這邊我們可以看到img的data-original屬性是包含了圖片的路徑的,所以我們就直接取data-original就可以了....

最後main方法執行...

if __name__ == '__main__':
    pool = ThreadPool(4)
    urls = [
        "http://www.doutula.com/photo/list/?page={}".format(str(i)) for i in range(1, 3)]
    pool.map(getImg, urls)
    pool.close()
    pool.join()
複製程式碼

這邊運用了線城池進行簡單的程式碼優化,後面會加入代理池和佇列進行優化。

程式碼地址:python爬取表情包並下載到本地

如果程式碼有幫助到您,記得點個start哦~~~

相關文章