#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 11/23/2019 4:06 PM
# @Author : DeltaT
# @File : 百度圖片爬蟲.py
"""爬蟲下載百度圖片"""
import re
import os
import urllib
import requests
search_kw = input('請輸入需要下載圖片種類: ')
begin_page_num = 0 # 請求次數
end_page_num = 30 # 每頁編號的增加值
page_num = 1 # 爬取的最大頁數
all_pic_urls = list() # 保存所有url
# 循環抓取每一頁的圖片地址
while True:
if begin_page_num > page_num:
break
print("第{}次發送請求".format(begin_page_num + 1))
current_page_num = (begin_page_num - 1) * end_page_num # 計算頁面url所需要的參數, 根據該參數拼湊url進行翻頁
search_kw = urllib.parse.quote(search_kw, safe='/')
url_begin = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word="
url = url_begin + search_kw + "&pn=" + str(current_page_num) + "&gsm=" + str(hex(current_page_num)) + \
"&ct=&ic=0&lm=-1&width=0&height=0"
# 獲取當前頁面內圖片的url列表
pic_urls = list()
try:
resp = requests.get(url)
html = resp.text
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S) # 正則匹配出需要的url
except Exception as e:
print(e)
begin_page_num += 1
all_pic_urls.extend(pic_urls) # 將當前頁的url保存到所有url列表中
# 創建文件夾
dir_path = './baidu_images'
if not os.path.exists(dir_path): # 判斷文件夾是否存在
os.mkdir('./baidu_images')
# 下載所有圖片
pic_url_list = list(set(all_pic_urls)) # url去重
for index, pic_url in enumerate(pic_url_list):
try:
resp = requests.get(pic_url, timeout=5)
pic_data = resp.content # 圖片的二進制數據
pic_path = dir_path + '/' + str(index) + '.jpg' # 圖片的路徑文件名
# 保存圖片的二進制數據
with open(pic_path, 'wb') as f:
f.write(pic_data)
print('已下載第{}張圖片:{}'.format(str(index + 1), str(pic_url)))
except Exception as e:
print('第{}張圖片下載失敗:'.format(str(index + 1), str(pic_url)))
print(e)
continue
Python爬蟲, 抓取百度圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.