python抓取百度圖片(關鍵字搜索)

原文鏈接

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# python3.0語法

# 用 python3 CaptureData 調用python文件

import os

import re

import urllib

import json

import socket

import urllib.request

import urllib.parse

import urllib.error

# 設置超時

import time

timeout = 5

socket.setdefaulttimeout(timeout)

class Crawler:

? ? # 睡眠時長

? ? __time_sleep = 0.1

? ? __amount = 0

? ? __start_amount = 0

? ? __counter = 0

? ? headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}

? ? # 獲取圖片url內(nèi)容等

? ? # t 下載圖片時間間隔

? ? def __init__(self, t=0.1):

? ? ? ? self.time_sleep = t

? ? # 保存圖片

? ? def __save_image(self, rsp_data, word):

? ? ? ? if not os.path.exists("./" + word):

? ? ? ? ? ? os.mkdir("./" + word)

? ? ? ? # 判斷名字是否重復,獲取圖片長度

? ? ? ? self.__counter = len(os.listdir('./' + word)) + 1

? ? ? ? for image_info in rsp_data['imgs']:

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? time.sleep(self.time_sleep)

? ? ? ? ? ? ? ? fix = self.__get_suffix(image_info['objURL'])

? ? ? ? ? ? ? ? urllib.request.urlretrieve(image_info['objURL'], './' + word + '/' + str(self.__counter) + str(fix))

? ? ? ? ? ? except urllib.error.HTTPError as urllib_err:

? ? ? ? ? ? ? ? print(urllib_err)

? ? ? ? ? ? ? ? continue

? ? ? ? ? ? except Exception as err:

? ? ? ? ? ? ? ? time.sleep(1)

? ? ? ? ? ? ? ? print(err)

? ? ? ? ? ? ? ? print("產(chǎn)生未知錯誤,放棄保存")

? ? ? ? ? ? ? ? continue

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? print("小黃圖+1,已有" + str(self.__counter) + "張小黃圖")

? ? ? ? ? ? ? ? self.__counter += 1

? ? ? ? return

? ? # 獲取后綴名

? ? @staticmethod

? ? def __get_suffix(name):

? ? ? ? m = re.search(r'\.[^\.]*$', name)

? ? ? ? if m.group(0) and len(m.group(0)) <= 5:

? ? ? ? ? ? return m.group(0)

? ? ? ? else:

? ? ? ? ? ? return '.jpeg'

? ? # 獲取前綴

? ? @staticmethod

? ? def __get_prefix(name):

? ? ? ? return name[:name.find('.')]

? ? # 開始獲取

? ? def __get_images(self, word='美女'):

? ? ? ? search = urllib.parse.quote(word)

? ? ? ? # pn int 圖片數(shù)

? ? ? ? pn = self.__start_amount

? ? ? ? while pn < self.__amount:

? ? ? ? ? ? url = 'http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=' + search + '&cg=girl&pn=' + str(

? ? ? ? ? ? ? ? pn) + '&rn=60&itg=0&z=0&fr=&width=&height=&lm=-1&ic=0&s=0&st=-1&gsm=1e0000001e'

? ? ? ? ? ? # 設置header防ban

? ? ? ? ? ? print (url)

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? time.sleep(self.time_sleep)

? ? ? ? ? ? ? ? req = urllib.request.Request(url=url, headers=self.headers)

? ? ? ? ? ? ? ? page = urllib.request.urlopen(req)

? ? ? ? ? ? ? ? rsp = page.read().decode('unicode_escape')

? ? ? ? ? ? except UnicodeDecodeError as e:

? ? ? ? ? ? ? ? print(e)

? ? ? ? ? ? ? ? print('-----UnicodeDecodeErrorurl:', url)

? ? ? ? ? ? except urllib.error.URLError as e:

? ? ? ? ? ? ? ? print(e)

? ? ? ? ? ? ? ? print("-----urlErrorurl:", url)

? ? ? ? ? ? except socket.timeout as e:

? ? ? ? ? ? ? ? print(e)

? ? ? ? ? ? ? ? print("-----socket timout:", url)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? # 解析json

? ? ? ? ? ? ? ? rsp_data = json.loads(rsp)

? ? ? ? ? ? ? ? self.__save_image(rsp_data, word)

? ? ? ? ? ? ? ? # 讀取下一頁

? ? ? ? ? ? ? ? print("下載下一頁")

? ? ? ? ? ? ? ? pn += 60

? ? ? ? ? ? finally:

? ? ? ? ? ? ? ? page.close()

? ? ? ? print("下載任務結束")

? ? ? ? return

? ? def start(self, word, spider_page_num=1, start_page=1):

? ? ? ? """

? ? ? ? 爬蟲入口

? ? ? ? :param word: 抓取的關鍵詞

? ? ? ? :param spider_page_num: 需要抓取數(shù)據(jù)頁數(shù) 總抓取圖片數(shù)量為 頁數(shù)x60

? ? ? ? :param start_page:起始頁數(shù)

? ? ? ? :return:

? ? ? ? """

? ? ? ? self.__start_amount = (start_page - 1) * 60

? ? ? ? self.__amount = spider_page_num * 60 + self.__start_amount

? ? ? ? self.__get_images(word)

if __name__ == '__main__':

? ? crawler = Crawler(0.05)

? ? # crawler.start('美女', 1, 2)

? ? crawler.start('室內(nèi)自拍', 3, 3)

#? ? crawler.start('帥哥', 5)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • IntroductionIn unit 4 you are going to learn how to finis...
    丁昆朋閱讀 563評論 0 0
  • Python 面向對象Python從設計之初就已經(jīng)是一門面向對象的語言,正因為如此,在Python中創(chuàng)建一個類和對...
    順毛閱讀 4,366評論 4 16
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 在古裝宮廷戲中,太監(jiān)永遠是一個不可或缺的特殊群體。 他們要么陰險狡詐,要么呆萌可愛,往往成為左右政局的重要力量。 ...
    南史先生閱讀 2,602評論 2 18
  • 我隨風來到遠方,卻找不到你的身影。 我留在原地等你,只見到落花順著流水。 他們總說 相思沒有用 我卻忍不住為你相思...
    喜樂平安_e591閱讀 204評論 5 3

友情鏈接更多精彩內(nèi)容