看見有意思的圖片想保存到本地忧设,可以用 python 進(jìn)行批量爬取下載,以下代碼以煎蛋網(wǎng)(http://jandan.net/)為例颠通,對(duì)煎蛋網(wǎng)的某一頁(yè)面進(jìn)行爬取址晕。
庫(kù)介紹
python 自帶標(biāo)準(zhǔn)庫(kù):urllib
(用于下載文件)
python 第三方庫(kù):BeautifulSoup
(解析 html 代碼)
? Requests
(用于向服務(wù)器請(qǐng)求資源 )
偽裝
現(xiàn)在的許多網(wǎng)站都有自己的一套反爬機(jī)制,但因?yàn)樾【W(wǎng)站的反爬機(jī)制不高顿锰,所以做個(gè)初級(jí)偽裝就可以開始爬取數(shù)據(jù)了谨垃,爬蟲中常用的手段就是偽裝成一個(gè)瀏覽器,在瀏覽器中打開網(wǎng)站調(diào)試工具找到需要的 User-Agent
和 Cookie
撵儿,構(gòu)造成一個(gè)字典:
import requests,urllib
from bs4 import BeautifulSoup
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Cookie': 'jdna = 01b0531fab6a989460dd1b231010b496 #1492434771779; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1492430829,1492430927,1492430979; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1492434773; _ga=GA1.2.1686071134.1492430830; _gat=1'}
作為下面代碼的參數(shù)傳入乘客。
向網(wǎng)站發(fā)起請(qǐng)求
url = 'http://jandan.net/ooxx/page-0'
code = requests.get(url,header)
get 函數(shù)傳入兩個(gè)參數(shù)狐血,第一個(gè)是網(wǎng)站的 url 淀歇,第二個(gè)是偽裝成瀏覽器的字典參數(shù)。
解析
請(qǐng)求發(fā)送完畢后匈织,服務(wù)器給我們返回一堆信息浪默,有狀態(tài)碼,有網(wǎng)頁(yè)實(shí)體內(nèi)容等缀匕,下面開始解析:
plain_text = code.text
Soup = BeautifulSoup(plain_text, 'lxml') # 實(shí)例化解析器Soup
download_links = []
folder_path = 'C://Users/Stone/Desktop/jiandan/' # 存儲(chǔ)位置
for pic_tag in Soup.select('p > img'): # 獲取圖片下載鏈接
pic_link = 'http:' + pic_tag.get('src') # 拼接下載鏈接
download_links.append(pic_link) # 存入列表
這段代碼中纳决,實(shí)例化 html 解析器,然后將每張圖片的地址給保存在一個(gè)列表里乡小,其中采用了 bs4
中的 select()
方法阔加,尋找所有具有 p > img
結(jié)構(gòu)的標(biāo)簽。
開始下載 & 成果展
for item in download_links:
urllib.urlretrieve(item, folder_path + item[-10:])
print '此頁(yè)面下載完成!'
其中用到的是標(biāo)準(zhǔn)庫(kù) urllib
的 urlretrieve()
方法满钟,進(jìn)行下載操作胜榔,第一個(gè)參數(shù)是圖片 url 胳喷,第二個(gè)參數(shù)是文件名。下載結(jié)果如下:
參考資料:
BeautifulSoup 中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
Requests 中文文檔:http://cn.python-requests.org/zh_CN/latest/