爬蟲,全稱網路爬蟲,就是通過技術手段從網路獲取資料的程式或者指令碼
人生苦短,我選python。本次就用python來進行實現對一個桌布網站的圖片下載
本篇文章就是直接爬蟲實戰。通過本文,帶你瞭解requests庫的基本使用,並且完成桌布網站的圖片爬取
宣告:博主攻城獅白玉的本篇博文只用於對於爬蟲技術的學習交流。如果侵犯到相關網站利益,請聯絡我刪除博文。造成不便還請見諒。希望各位同學在學習的時候不要過於頻繁的去請求。
Requests庫是python一個很好用的http請求庫。封裝得很好~在我們爬蟲的時候常常也會用到。
Requests的官方介紹說到,讓HTTP服務人類。有一說一,這是個非常容易使用的庫。本次咱們的爬蟲也會用到這個庫。
關於requests庫的介紹,可以看一下官方檔案
Requests: 讓 HTTP 服務人類 - Requests 2.18.1 檔案
使用前記得安裝requests庫
pip install requests
進入目標網站
隨便點開一張圖,檢視它的url,http://www.netbian.com/desk/23744.htm
先留意一下這個網址,後面會用到
回到瀏覽器,開啟F12,通過目標元素檢查工具,點選剛剛我們點過的圖片。通過它的元素我們可以知道a標籤裡的屬性值href的連結就是上面我們存取圖片的連結地址
我們在大圖的頁面,同樣用f12點選一下,找到圖片的連結地址
存取圖片連結髮現是咱們要的大圖。至此,對於網站的分析完畢。
綜上所述,咱們目標網站是一個桌布圖片網站,程式設計做到的步驟如下:
看起來是不是很容易,開幹
import requests
url = 'http://www.netbian.com/meinv/'
resp = requests.get(url)
resp.encoding = 'gbk'
#
with open('index.html', 'wb') as f:
f.write(resp.content)
通過requests庫發起get請求,請求桌布網站的首頁。並把結果儲存在index.html檔案裡面
開啟儲存的檔案一看,我們把首頁給下載下來了。
這裡我們通過xpath方式。這裡用到的是lxml庫。不懂lxml庫的話,參考下文
【Python】爬蟲解析利器Xpath,由淺入深快速掌握(附原始碼例子)
PS:谷歌渲染的頁面的xpath和requests請求回來的xpath會有不一樣。有時需要儲存下來進行xpath分析
對於元素進行定位。把a標籤的href值全部拿出來,而且也把對應的名稱取出來
tree = etree.HTML(resp.content)
node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')
sub_url_list = []
for node in node_list:
if len(node.xpath('./a/@href')) > 0:
sub_url = node.xpath('./a/@href')[0]
if len(node.xpath('./a/@href')) > 0:
title = node.xpath('./a/b/text()')[0]
sub_url_list.append((sub_url, title))
base_url = 'http://www.netbian.com/'
for sub_url, title in sub_url_list:
s_page = base_url + sub_url
s_resp = requests.get(s_page)
with open('s.html', 'wb') as f:
f.write(s_resp.content)
img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]
suffix = img.split('.')[-1]
img_content = requests.get(img).content
with open(f'./image/{title}.{suffix}', 'wb') as f:
f.write(img_content)
f.close()
下載完效果圖
import requests
from lxml import etree
import time
'''
目標網站是一個圖片網站
1.存取首頁
2.定位到每個圖片的下載連結
3.定位到每個圖片對應的大圖連結
4.下載,儲存圖片
'''
if __name__ == '__main__':
t1 = time.time()
url = 'http://www.netbian.com/meinv/'
resp = requests.get(url)
resp.encoding = 'gbk'
with open('index.html', 'wb') as f:
f.write(resp.content)
tree = etree.HTML(resp.content)
node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')
sub_url_list = []
for node in node_list:
if len(node.xpath('./a/@href')) > 0:
sub_url = node.xpath('./a/@href')[0]
if len(node.xpath('./a/@href')) > 0:
title = node.xpath('./a/b/text()')[0]
sub_url_list.append((sub_url, title))
#
base_url = 'http://www.netbian.com/'
for sub_url, title in sub_url_list:
s_page = base_url + sub_url
s_resp = requests.get(s_page)
s_tree = etree.HTML(s_resp.content)
img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]
suffix = img.split('.')[-1]
img_content = requests.get(img).content
with open(f'./image/{title}.{suffix}', 'wb') as f:
f.write(img_content)
f.close()
t2 = time.time()
print(t2-t1)
媽媽再也不用擔心我的學習了。
如果覺得有用的話,麻煩一鍵三連支援一下攻城獅白玉,並把本文分享給更多的小夥伴。你的簡單支援,我的無限創作動力