個人主頁:為夢而生~ 關(guān)注我一起學(xué)習(xí)吧!
專欄:python網(wǎng)絡(luò)爬蟲從基礎(chǔ)到實戰(zhàn) 歡迎訂閱!后面的內(nèi)容會越來越有意思~
往期推薦:
【Python爬蟲開發(fā)基礎(chǔ)⑦】urllib庫的基本使用
【Python爬蟲開發(fā)基礎(chǔ)⑧】XPath庫及其基本用法
我們在之前已經(jīng)有8篇文章講述基礎(chǔ)知識了,下面我們利用已有的知識來進(jìn)行一個簡單的爬蟲實戰(zhàn),感受一下爬蟲的魅力,同時也可以增加學(xué)習(xí)的樂趣~
本文爬蟲程序用到了urllib庫和XPath庫,都是上兩次文章講過的,鏈接已經(jīng)放在上面了,沒有看過的先看一下前置知識哦~下面我們馬上開始!
首先來看一下效果:
1 確定爬取目標(biāo)
我們第一步要做的,就是找到要爬取的目標(biāo)網(wǎng)站,同時利用開發(fā)者工具看清楚前端的代碼結(jié)構(gòu),方便我們寫合適的xpath代碼。
在這里,我們可以看到,class
屬性為container
的div
標(biāo)簽有兩個,通過定位知道下面的標(biāo)簽包含著想要的圖片。
在其中包含圖片的div
標(biāo)簽里面,我們注意到,每一個class
屬性為item masonry-brick
的div
標(biāo)簽對應(yīng)著一個圖片。
每一個圖片的地址和名字就藏在這里面,但是著并不代表可以直接用,具體原因我們后面再說。
2 開始寫代碼
- 首先,導(dǎo)入需要的庫
from lxml import etree
import urllib.request
- 設(shè)置開始和結(jié)束頁
start_page = int(input('請輸入起始頁碼:'))
end_page = int(input('清輸入結(jié)束頁碼:'))
- 然后,對每一頁的數(shù)據(jù),都按照這三步進(jìn)行:(1)請求對象的定制 (2)獲取網(wǎng)頁的源碼 (3)下載圖片
- 可以用一個for循環(huán)來完成
for page in range(start_page, end_page+1):
# (1) 請求對象的定制
request = create_request(page)
# (2) 獲取網(wǎng)頁的源碼
content = get_content(request)
# (3) 下載
down_load(content)
- 下面來定義里面的每一個函數(shù)(細(xì)節(jié)放在代碼的注釋中講解)
# 請求對象的定制
def create_request(page):
# 由于不同的頁碼會導(dǎo)致網(wǎng)址的改變,所以我們把不變的部分作為base_url
base_url = 'https://sc.chinaz.com/tupian/xiaomaotupian.html'
# 對于形參不同的page,我們通過簡單的字符串拼接得到響應(yīng)的網(wǎng)址
if page == 1 :
url = base_url
else :
url = 'https://sc.chinaz.com/tupian/xiaomaotupian_' + str(page) + '.html'
print(url)
# 設(shè)置請求頭,這里設(shè)置了UA,每一個瀏覽器的UA不一樣,可以到抓包后的報文中找
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
# 生成請求對象,用于向服務(wù)器發(fā)送請求
request = urllib.request.Request(url = url, headers = headers)
# 返回請求對象
return request
- 根據(jù)請求對象,向服務(wù)器發(fā)送請求,獲取網(wǎng)頁源碼
# 獲取網(wǎng)頁的源碼
def get_content(request):
# 發(fā)送請求獲取響應(yīng)
response = urllib.request.urlopen(request)
# 對響應(yīng)進(jìn)行解碼
content = response.read().decode('utf-8')
# 返回
return content
- 進(jìn)行最后一步:下載
# 下載
def down_load(content):
# 創(chuàng)建ElementTree對象
tree = etree.HTML(content)
# 使用xpath表達(dá)式,獲取圖片的名字和對應(yīng)的地址
name_list = tree.xpath('//div[@class="container"]//img/@alt')
# 由于頁面的預(yù)加載,獲取到的HTML代碼中,圖片的地址并不會直接存在src里面,而是后面的data-original
src_list = tree.xpath('//div[@class="container"]//img/@data-original')
# print(len(name_list), len(src_list))
# 遍歷本頁面的所有圖片
for i in range(len(name_list)):
name = name_list[i]
src = src_list[i]
url = 'https:' + src
# print(name, url)
# 利用urlretrieve進(jìn)行圖片的下載
urllib.request.urlretrieve(url = url, filename = './cat imgs/' + name + '.jpg')
注意:上面的圖片預(yù)加載是指:當(dāng)頁面還沒有滑倒最下面的時候,后面的img標(biāo)簽里面的src屬性并沒有存儲圖片的地址,而地址是存在后面的data-original里面,如下圖所示:文章來源:http://www.zghlxwxcb.cn/news/detail-505843.html
最后,我們運行代碼,就可以得到一開始的圖片了!趕緊試一下吧!后面的文章會介紹更加豐富多彩的爬蟲基礎(chǔ)~敬請期待文章來源地址http://www.zghlxwxcb.cn/news/detail-505843.html
到了這里,關(guān)于【Python爬蟲開發(fā)實戰(zhàn)①】使用urllib以及XPath爬取可愛小貓圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!