python 爬取壁紙網(wǎng)站的示例
本次爬蟲(chóng)用到的網(wǎng)址是:
http://www.netbian.com/index.htm: 彼岸桌面.里面有很多的好看壁紙,而且都是可以下載高清無(wú)損的,還比較不錯(cuò),所以我就拿這個(gè)網(wǎng)站練練手。
作為一個(gè)初學(xué)者,剛開(kāi)始的時(shí)候,無(wú)論的代碼的質(zhì)量如何,總之代碼只要能夠被正確完整的運(yùn)行那就很能夠讓自己開(kāi)心的,如同我們的游戲一樣,能在短時(shí)間內(nèi)得到正向的反饋,我們就會(huì)更有興趣去玩。
學(xué)習(xí)也是如此,只要我們能夠在短期內(nèi)得到學(xué)習(xí)帶來(lái)的反饋,那么我們的對(duì)于學(xué)習(xí)的欲望也是強(qiáng)烈的。
作為一個(gè)菜雞,能夠完整的完整此次爬蟲(chóng)程序的編寫(xiě),那便是一個(gè)最大的收貨,但其實(shí)我在此次過(guò)程中的收獲遠(yuǎn)不止此。
好的代碼其實(shí)應(yīng)該具有以下特性
- 能夠滿足最關(guān)鍵的需求
- 容易理解
- 有充分的注釋
- 使用規(guī)范的命名
- 沒(méi)有明顯的安全問(wèn)題
- 經(jīng)過(guò)充分的測(cè)試
就以充分的測(cè)試為例,經(jīng)常寫(xiě)代碼的就應(yīng)該知道,盡管多數(shù)時(shí)候你的代碼沒(méi)有BUG,但那僅僅說(shuō)明只是大多數(shù)情況下是穩(wěn)定的,但是在某些條件下就會(huì)出錯(cuò)(達(dá)到出錯(cuò)條件,存在邏輯問(wèn)題的時(shí)候等)。這是肯定的。至于什么原因,不同的代碼有不同的原因。如果代碼程序都是一次就能完善的,那么我們使用的軟件的軟件就不會(huì)經(jīng)常更新了。其他其中的道理就不一 一道說(shuō)了,
久而自知
好的代碼一般具有的5大特性
1.便于維護(hù)
2.可復(fù)用
3.可擴(kuò)展
4.強(qiáng)靈活性
5.健壯性
經(jīng)過(guò)我的代碼運(yùn)行我發(fā)現(xiàn)時(shí)間復(fù)雜度比較大,因此這是我將要改進(jìn)的地方,但也不止于此。也有很多利用得不合理的地方,至于存在的不足的地方就待我慢慢提升改進(jìn)吧!
路過(guò)的大佬歡迎留下您寶貴的代碼修改意見(jiàn),
完整代碼如下
import os
import bs4
import re
import time
import requests
from bs4 import BeautifulSoup
def getHTMLText(url, headers):
"""向目標(biāo)服務(wù)器發(fā)起請(qǐng)求并返回響應(yīng)"""
try:
r = requests.get(url=url, headers=headers)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, "html.parser")
return soup
except:
return ""
def CreateFolder():
"""創(chuàng)建存儲(chǔ)數(shù)據(jù)文件夾"""
flag = True
while flag == 1:
file = input("請(qǐng)輸入保存數(shù)據(jù)文件夾的名稱:")
if not os.path.exists(file):
os.mkdir(file)
flag = False
else:
print('該文件已存在,請(qǐng)重新輸入')
flag = True
# os.path.abspath(file) 獲取文件夾的絕對(duì)路徑
path = os.path.abspath(file) + "\\"
return path
def fillUnivList(ulist, soup):
"""獲取每一張圖片的原圖頁(yè)面"""
# [0]使得獲得的ul是 <class 'bs4.BeautifulSoup'> 類型
div = soup.find_all('div', 'list')[0]
for a in div('a'):
if isinstance(a, bs4.element.Tag):
hr = a.attrs['href']
href = re.findall(r'/desk/[1-9]\d{4}.htm', hr)
if bool(href) == True:
ulist.append(href[0])
return ulist
def DownloadPicture(left_url,list,path):
for right in list:
url = left_url + right
r = requests.get(url=url, timeout=10)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text,"html.parser")
tag = soup.find_all("p")
# 獲取img標(biāo)簽的alt屬性,給保存圖片命名
name = tag[0].a.img.attrs['alt']
img_name = name + ".jpg"
# 獲取圖片的信息
img_src = tag[0].a.img.attrs['src']
try:
img_data = requests.get(url=img_src)
except:
continue
img_path = path + img_name
with open(img_path,'wb') as fp:
fp.write(img_data.content)
print(img_name, " ******下載完成!")
def PageNumurl(urls):
num = int(input("請(qǐng)輸入爬取所到的頁(yè)碼數(shù):"))
for i in range(2,num+1):
u = "http://www.netbian.com/index_" + str(i) + ".htm"
urls.append(u)
return urls
if __name__ == "__main__":
uinfo = []
left_url = "http://www.netbian.com"
urls = ["http://www.netbian.com/index.htm"]
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
start = time.time()
# 1.創(chuàng)建保存數(shù)據(jù)的文件夾
path = CreateFolder()
# 2. 確定要爬取的頁(yè)面數(shù)并返回每一頁(yè)的鏈接
PageNumurl(urls)
n = int(input("訪問(wèn)的起始頁(yè)面:"))
for i in urls[n-1:]:
# 3.獲取每一個(gè)頁(yè)面的首頁(yè)數(shù)據(jù)文本
soup = getHTMLText(i, headers)
# 4.訪問(wèn)原圖所在頁(yè)鏈接并返回圖片的鏈接
page_list = fillUnivList(uinfo, soup)
# 5.下載原圖
DownloadPicture(left_url, page_list, path)
print("全部下載完成!", "共" + str(len(os.listdir(path))) + "張圖片")
end = time.time()
print("共耗時(shí)" + str(end-start) + "秒")
運(yùn)行

部分展示結(jié)果如下:

以上就是python 爬取壁紙網(wǎng)站的示例的詳細(xì)內(nèi)容,更多關(guān)于python 爬取壁紙網(wǎng)站的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Python詳解文字轉(zhuǎn)語(yǔ)音的實(shí)現(xiàn)
在自然語(yǔ)言處理上,文字、音頻互轉(zhuǎn)是一個(gè)很關(guān)鍵的技術(shù)點(diǎn)。對(duì)于語(yǔ)音轉(zhuǎn)文字,個(gè)人實(shí)現(xiàn)較為困難,我們可以使用語(yǔ)音轉(zhuǎn)文字的軟件或借助各API(如科大訊飛等)進(jìn)行移植開(kāi)發(fā)。不過(guò)文字轉(zhuǎn)語(yǔ)音就相對(duì)而言容易實(shí)現(xiàn)很多了2022-02-02
Python私有pypi源注冊(cè)自定義依賴包Windows詳解
這篇文章主要介紹了Python私有pypi源注冊(cè)自定義依賴包Windows,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
用python寫(xiě)PDF轉(zhuǎn)換器的實(shí)現(xiàn)
這篇文章主要介紹了用python寫(xiě)PDF轉(zhuǎn)換器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

