實戰:如何通過python requests庫寫一個抓取小網站圖片的小爬蟲
有點愛好的你,偶爾應該會看點圖片文字,最近小網站經常崩潰消失,不如想一個辦法本地化吧,把小照片珍藏起來!
首先,準備一個珍藏的小網站,然後就可以開始啦!
vx:13237066568
QQ:672377334
進群口令1(新增好友時填寫或通過後回覆):爬蟲
進群口令2(新增好友時填寫或通過後回覆):csdn
好了,正題開始
第一步
我們先寫一個獲取網站的url的連結,因為url常常是由page或者,其他元素構成,我們就把他分離出來,我找到的網站主頁下有圖片欄目,圖片欄目內有標題頁,一個標題裡有10張照片大概
所以步驟是:
第一步:進入圖片欄目的標題頁,圖片欄目的標題頁
規律為第一頁:www.xxxx…/tp.html
第二頁:www.xxxx…/tp-2.html
第三頁:www.xxxx…/tp-3.html
…
…
def getHTML(pages):
for i in range(1,pages+1):
url = 'https://'
if i>1:
url=url+'-'+str(i)+'.html'
print('------正在下載第%d頁的圖片!------'%(i))
htmlTex(url)
else:
url=url+'.html'
print('------正在下載第%d頁的圖片!------'%(i))
htmlTex(url)
第二步
上面我們已經拿到我們的連結了,這個連結是每一個換頁面的連結,我們要從換頁連結裡頭獲取進入標題的連結,標題裡有各種圖片,我們用xpath 獲取標題連結路徑待會
所以我們給url 偽裝一下header,我這裡選擇偽裝的手機瀏覽
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
,然後requests.get(url, headers=headers)獲取頁面 text內容
傳給下一個函式用來抓取進入標題的連結
def htmlTex(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
htmlTXT = r.text
getLinks(htmlTXT)
第三步
getLinks函式拿到解析程式碼,根據xpath路徑獲取指定的標題連結,
再次requests該標題連結,就可以獲取標題裡頭的圖片所在頁面的text文字傳給 getPicLINK 函式
def getLinks(txt):
global name
content = txt
content = content.replace('<!--', '').replace('-->', '')
LISTtree = html.etree.HTML(content)
links=LISTtree.xpath('//div[@class="text-list-html"]/div/ul/li/a/@href')
for link in links:
name=link[link.rfind('/')+1:link.rfind('.')]
url='https:'+link
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
# print(r.text)
htmlTXT = r.text
getPicLINK(htmlTXT)
getPicLINK 收到圖片地址文字,用xpath獲取圖片地址,然後下載
def getPicLINK(txt):
global url
content=txt
content=content.replace('<!--','').replace('-->','')
LISTtree=html.etree.HTML(content)
link_list1=LISTtree.xpath('//main/div[@class="content"]/img[@class="videopic lazy"]/@data-original')
for link in link_list1:
try:
history(link)
except Exception as e:
with open("errorLog.txt", "a+", encoding="utf8") as f1:
f1.write(getNowTime() + "-- " + traceback.format_exc() + '\n')
print(getNowTime() + "-- " + traceback.format_exc() + '\n')
print("piclink出錯正在跳過")
continue
其中 history函式用於判斷圖片是否已存在,原理是在每次下載時存入圖片名字到txt中,下載前讀取txt內圖片名字判斷圖片是否存在
def history(link):
global picnamelist
global name
link=link
pic_name = name + link[link.rfind('/') + 1:]
path_name = 'pics2/' + pic_name
with open('pics2/history.txt','a+',encoding='utf8') as f:
f.seek(0,0)
picnamelist=f.readlines()
if pic_name+'\n' not in picnamelist:
f.writelines(pic_name+'\n')
download_img(link,path_name)
return
else:
print('圖片%s已存在,已跳過!'%(pic_name))
pass
下載函式:
picCount=0
def download_img(link,picName):
global picCount
global picnamelist
pic_name=picName
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
r = requests.get(link, headers=headers)
print("正在下載:%s" % (pic_name[pic_name.rfind('/')+1:]))
with open(pic_name,'wb',) as f:
f.write(r.content)
picCount=picCount+1
print("第%d張圖片下載完成! %s" % (picCount,getNowTime()))
看完文章覺得不錯就點贊加個關注吧
。。。。。
相關文章
- Python爬蟲小專案:爬一個圖書網站Python爬蟲網站
- 一個實現批量抓取淘女郎寫真圖片的爬蟲爬蟲
- ReactPHP 爬蟲實戰:下載整個網站的圖片ReactPHP爬蟲網站
- Python爬蟲—爬取某網站圖片Python爬蟲網站
- python動態網站爬蟲實戰(requests+xpath+demjson+redis)Python網站爬蟲JSONRedis
- 網路爬蟲小偏方:robots.txt快速抓取網站的小竅門爬蟲網站
- Python網路爬蟲實戰小專案Python爬蟲
- 爬蟲——三個小實戰爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- Python網路爬蟲資料採集實戰:Requests和Re庫Python爬蟲
- python爬蟲之抓取小說(逆天邪神)Python爬蟲
- Python爬蟲實戰詳解:爬取圖片之家Python爬蟲
- python網路爬蟲_Python爬蟲:30個小時搞定Python網路爬蟲視訊教程Python爬蟲
- Python爬蟲神器requests庫的使用Python爬蟲
- Python 爬蟲實戰(二):使用 requests-htmlPython爬蟲HTML
- 使用nodeJS寫一個簡單的小爬蟲NodeJS爬蟲
- Python 第一個爬蟲,爬取 147 小說Python爬蟲
- Python爬蟲入門教程 18-100 煎蛋網XXOO圖片抓取Python爬蟲
- 【python--爬蟲】千圖網高清背景圖片爬蟲Python爬蟲
- 最新《30小時搞定Python網路爬蟲專案實戰》Python爬蟲
- python 爬蟲之requests爬取頁面圖片的url,並將圖片下載到本地Python爬蟲
- 使用正則編寫簡單的爬蟲爬取某網站的圖片爬蟲網站
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 如何自己寫一個網路爬蟲爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 小豬的Python學習之旅 —— 9.爬蟲實戰:爬取花瓣網的小姐姐Python爬蟲
- 爬蟲Selenium+PhantomJS爬取動態網站圖片資訊(Python)爬蟲JS網站Python
- 爬蟲之requests庫爬蟲
- 初探python之做一個簡單小爬蟲Python爬蟲
- Python通過代理多執行緒抓取圖片Python執行緒
- Python網路爬蟲實戰Python爬蟲
- python爬蟲常用庫之requests詳解Python爬蟲
- java實現一個簡單的爬蟲小程式Java爬蟲
- 如何讓Python爬蟲一天抓取100萬張網頁Python爬蟲網頁
- 《從零開始學習Python爬蟲:頂點小說全網爬取實戰》Python爬蟲
- 使用Python和requests庫的簡單爬蟲程式Python爬蟲
- Python2爬蟲利器:requests庫的基本用法Python爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲