1. 程式人生 > >python爬取百度搜索圖片

python爬取百度搜索圖片

知乎 需要 with 異常 mage 不足 request height adr

在之前通過爬取貼吧圖片有了一點經驗,先根據之前經驗再次爬取百度搜索界面圖片

廢話不說,先上代碼

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/22 10:44
# @Author  : wqj
# @Contact : [email protected]
# @Site    : 
# @File    : test.py
# @Software: PyCharm Community Edition
import requests
import re
import os

url = r‘http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B1%ED%C7%E9%B0%FC&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=000000‘
dirpath = r‘D:\img‘

html = requests.get(url).text
urls = re.findall(r‘"objURL":"(.*?)"‘, html)

if not os.path.isdir(dirpath):
    os.mkdir(dirpath)

index = 1
for url in urls:
    print("Downloading:", url)
    
try:
        res = requests.get(url)
        if str(res.status_code)[0] == "4":
            print("未下載成功:", url)
            continue
    except Exception as e:
        print("未下載成功:", url)

filename = os.path.join(dirpath, str(index) + ".jpg") with open(filename, ‘wb‘) as f: f.write(res.content) index += 1print("下載結束,一共 %s 張圖片" % index)

  在爬取得過程中,最先遇到的問題是打開百度圖片界面,查看源碼,並不能看到img下的src標簽,後通過在知乎上查看文章得知百度將圖片放在了acjson下,通過XHR來查看

技術分享

進入之後發現其中有較多圖片地址,經過驗證後發現objURL才是我們需要的標簽

這樣我們就可以利用python中的requests庫來對頁面進行解析匹配

其中

try:
        res = requests.get(url)
        if str(res.status_code)[0] == "4":
            print("未下載成功:", url)
            continue
except Exception as e: print("未下載成功:", url)

技術分享

需要我們來判斷狀態碼是否正常,如異常需要捕捉。

基本上這個python程序就算結束了。

不足的地方有很多,譬如只可以抓取首頁的30張圖片

技術分享

這是相鄰的兩個請求,每相鄰像個請求之間有30張圖片,經過分析我們可以看出來其中只有兩個參數發生變化,一個是pn,另一個是

gsm。pn是以30遞增的規律,而gsm則無法判斷。(剛入python的坑)

所以無法連續抓取。。。

python爬取百度搜索圖片