千圖網圖片爬蟲

利用正則表達式和requests下載千圖網高清圖片,非會員圖片哦

    網頁整體規則性比較一致,多翻閱幾個頁面就可以發現規律了,無非是
html_url = "http://www.58pic.com/tupian/jianshen-0-0-{}.html".format(n),n不斷增加,而且對於03或者3也沒有特別區分,所以翻頁構造基本就可以直接處理了

    for n in range(0, 11):
        print("******** 正在下載第%s頁的圖片 ********" % (n+1))
        html_url = "http://www.58pic.com/tupian/jianshen-0-0-{}.html".format(n)
        PicThousand().run(html_url)

    對圖片的獲取直接右鍵檢查就可以看到url了,打開進去預覽就可以看到圖片了



    但是這裏的後綴和平常圖片的.jpg格式不太一樣,按理說應該是對圖片的格式方面做了處理,將後綴去掉應該就是想要的高清圖了

    但是網頁卻顯示了40310014的錯誤碼,有心的小夥伴們應該有了解過這個是違反了防盜鏈規則,後面的英文翻譯也能直接明白,我們再回去檢查圖片的headers,發現了referer裏面規定了圖片下載時爲空


    這裏就可以簡單的在每次下載時把當前地址複製給headers裏面的referer即可

       url = url_list[index].replace('!qt324', '')
            self.getHtmlHeaders['Referer'] = url

    網頁源碼以及url都可以直接使用正則表達式獲取,比較簡單

    def getHtml(self, url):
        response = requests.get(url, self.getHtmlHeaders).text
        return response

    def getUrl(self, text):
        image_urls = re.compile('data-original="(.*?)"', re.S).findall(text)
        return image_urls

完整代碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@author: maya
@software: Pycharm
@file: pic.py
@time: 2018/12/19 16:13
@desc:
'''
import requests
import re
import time


class PicThousand():
    def __init__(self):
        self.getHtmlHeaders={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',

        }


    def getHtml(self, url):
        response = requests.get(url, self.getHtmlHeaders).text
        print(response)
        return response

    def getUrl(self, text):
        image_urls = re.compile('data-original="(.*?)"', re.S).findall(text)
        print(image_urls)
        return image_urls

    def img_Download(self, url_list):
        for index in range(len(url_list)):
            url = url_list[index].replace('!qt324', '')
            self.getHtmlHeaders['Referer'] = url
            file_name = url.replace('!qt324', '').split('/')[-1]
            print("正在下載第%s張圖片:%s" % (index + 1, file_name))
            response = requests.get(url, headers= self.getHtmlHeaders)
            with open('img/'+file_name, 'wb') as f:
                f.write(response.content)

    def run(self, url):
        text = self.getHtml(url)
        list = self.getUrl(text)
        self.img_Download(list)


if __name__ == '__main__':

    start = time.time()
    for n in range(0, 11):
        print("******** 正在下載第%s頁的圖片 ********" % (n+1))
        html_url = "http://www.58pic.com/tupian/jianshen-0-0-{}.html".format(n)
        PicThousand().run(html_url)
    end = time.time()
    print("******** 下載完成,共用時%.2f    ********" % (end-start))

  • 更多爬蟲代碼詳情參考Github
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章