1. 程式人生 > >Python3爬蟲之爬取百度高清圖片

Python3爬蟲之爬取百度高清圖片

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:  OFZFZS 
# Datetime:2018/3/23 11:00
# Description: 百度圖片爬取 這裡只做了簡單處理,注意百度圖片返回的資料是ajax資料,
# 每次返回的是30條,但是我只看到普通圖片,高清的圖片地址好像加密了,所以我這裡只取三十張,沒有用Ajax.
import re
import urllib
from urllib import request
from urllib import parse
import os


class Spider:
    def __init__(self, name):
        self.name = name
        self.item_list_middle = []
        self.item_list_obj = []
        self.i = 1  #儲存圖片時起名字用的變數

    def loadPage(self):
        # request.quote(self.name) 和parse.urlencode()這裡的效果是一樣的,需要注意的是第二個裡面只能放字典
        dict1 = {"word": self.name}
        encodeName = parse.urlencode(dict1)
        url = "https://image.baidu.com/search/index?tn=baiduimage&" + encodeName
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
        req = request.Request(url, headers=headers)
        response = request.urlopen(req)
        html = response.read().decode("utf-8")

        # 正則處理
        # 標清圖片地址
        pattern = re.compile(r'\"middleURL\"\:\"(.*?)\"\,', re.S)
        self.item_list_middle = pattern.findall(html)

        # 高清圖片地址
        #正則 瞎寫的
        pattern = re.compile(r'\"objURL\"\:\"(.*?)\"\,', re.S)
        self.item_list_obj = pattern.findall(html)



    def writeToFile(self):
        if os.path.exists("爬取圖片") == False:
            os.mkdir("爬取圖片")
        for item in self.item_list_middle:
            print(item)
            urllib.request.urlretrieve(item, "爬取圖片/%d.jpg" % self.i)
            self.i += 1
        print("處理成功..")


if __name__ == "__main__":
    spider = Spider("美女")
    spider.loadPage()
    spider.writeToFile()