零基礎(chǔ)爬蟲實(shí)例教學(xué)

本篇主要面向于對Python爬蟲感興趣的零基礎(chǔ)的同學(xué),實(shí)例為下載煎蛋網(wǎng)中指定頁面的妹子圖。好了,話不多說,讓我們開始吧!

為什么選取這個(gè)網(wǎng)站? 1.妹子 2.這個(gè)網(wǎng)站比較好爬取,適合入門

所需工具

1.Python3.x
2.Pycharm
3.Chrome瀏覽器
以上的安裝方法在此就不提了,但是需要注意的是要把Python添加到路徑中(此處為了方便引用了廖雪峰老師的圖例)

Python安裝注意

創(chuàng)建文件以及庫的導(dǎo)入和安裝

各個(gè)軟件安裝調(diào)試完成后我們就開始著手我們的小項(xiàng)目。
1.打開Pycharm并且創(chuàng)建項(xiàng)目

配置Pycharm完成后應(yīng)該是這個(gè)頁面
image.png
image.png

(上面創(chuàng)建的項(xiàng)目是文件夾,這里右鍵你創(chuàng)建的文件夾,按照圖中實(shí)例即可創(chuàng)建相應(yīng)文件)

假設(shè)現(xiàn)在你的Python file(名為'ooxx')已經(jīng)建好了,代碼第一行開始,我們導(dǎo)入所需要的庫。

庫是干什么的?Python之所以很好用就是因?yàn)樗性S多自帶的庫以及第三方庫,這些庫可以直接提供方法給用戶使用,例如導(dǎo)入math庫,就可以用來計(jì)算平方根;導(dǎo)入time庫,就可以計(jì)算程序運(yùn)行時(shí)間等等功能。無需我們自己再次重寫這些功能(也叫造輪子)

導(dǎo)入所需庫

這樣就完成了所需庫的導(dǎo)入

1.這里是灰色的是因?yàn)樗鼈冞€沒有被使用
2.這里有兩種導(dǎo)入庫的方法,例如第5行是指從bs4庫中導(dǎo)入BeautifulSoup方法,這樣可以節(jié)約空間,因?yàn)槠渌姆椒ㄎ覀兌紩簳r(shí)用不著

此外,由于第三方庫你并沒有安裝后續(xù)會(huì)報(bào)錯(cuò),這里提供一種簡單的方法,Pycharm > Setting > 左上角搜索Project Interpreter

庫的安裝

檢索上述你沒有安裝的庫,點(diǎn)擊綠色的+號后,搜索點(diǎn)擊安裝等待片刻即可.(當(dāng)然也還有其他的很多安裝庫的方法,比如pip,Anaconda等)

正式開始

啰嗦了一大堆準(zhǔn)備工作,現(xiàn)在正式開始(心虛.....因?yàn)楹罄m(xù)還會(huì)穿插很多小知識(shí)點(diǎn)照顧完全零基礎(chǔ)的朋友)

image.png

按照圖中的代碼鍵入,右鍵 run'ooxx',下方就會(huì)顯示
<Response [200]>
來看第8行,等號右邊的表示調(diào)用requests庫的get方法,中間的參數(shù)填入我們所要訪問的網(wǎng)址(也就是上一步我們所賦值的url),然后將其整體賦予左邊的wb_data,打印wb_data,返回狀態(tài)碼200,可以說只要狀態(tài)碼不是200的都不算正常訪問
例如當(dāng)網(wǎng)站識(shí)別出你為爬蟲訪問,就會(huì)返回404或者其他狀態(tài)碼,那么你就得不到想要的數(shù)據(jù)。所以這里我們會(huì)先介紹一種最初級的隱匿措施,將我們利用Python的訪問變得更像瀏覽器訪問。

User - Agent

查看UA.gif

按照GIF中的操作我們可以獲取到Chrome瀏覽器訪問時(shí)的UA,我們將UA復(fù)制下來,加入到代碼中,

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}
wb_data = requests.get('http://jandan.net/ooxx',headers = headers)

這樣我們訪問網(wǎng)頁時(shí)的UA就是瀏覽器啦,然后,我們就得解析網(wǎng)頁,因?yàn)轫撁嬷械脑厝慷际谴娣旁诰W(wǎng)頁的源代碼之間的(可以右鍵>查看網(wǎng)頁源代碼試試看)

解析網(wǎng)頁

解析網(wǎng)頁這里我們用的是BeautifulSoup,這是比較常用也很方便的庫,在原來的代碼下加上
soup = BeautifulSoup(wb_data.text, 'lxml')
這時(shí)打印soup,我們就可以看見比較美觀的網(wǎng)頁源碼了。

重點(diǎn)到啦~

這時(shí)候我們需要找到我們需要下載的圖片在網(wǎng)頁中的位置!
首先添加兩行代碼

img = soup.select('  ')  # select中填入的selector就是我們需要找的  
print(img)

了解一點(diǎn)html的同學(xué)(不了解也沒事)都知道,網(wǎng)頁是有結(jié)構(gòu)的,

image.png
可以看到圖中那一列的圖片都包含在網(wǎng)頁中一個(gè)叫做ol.commentlist下面,我們右鍵圖片,點(diǎn)擊檢查
image.png
就可以發(fā)現(xiàn)這個(gè)圖片的地址,那么我們的目標(biāo)就是找到這個(gè)頁面中所有ol.commentlist框架下的圖片鏈接
但是我們需要的是Python自己去匹配而不是我們?nèi)フ?,所以我們這樣做。
查看selector.gif

如gif中所示,我們所復(fù)制的selector
#comment-3535468 > div > div > div.text > p > img:nth-child(3)
就是這個(gè)元素所獨(dú)有的地址,根據(jù)這個(gè)我們肯定是不能找到所有的圖片鏈接的,所以我們需要做適當(dāng)?shù)恼{(diào)整,以匹配所有的圖片鏈接,前面的comment-數(shù)字代表不同的用戶,所以肯定不能要,后方的nth-child(3)表示img中第3個(gè)所以也不能要,就是說我們需要去除所有表示唯一的標(biāo)識(shí)才能匹配所有的元素,
最終我所找到的能匹配到所有圖片的selector為div > div > div.text > p > img,將其加入剛才select.右鍵運(yùn)行。

image.png

可以看到我們已經(jīng)匹配了當(dāng)前頁面的所有img元素,然后我們需要獲取其中的圖片鏈接,但并不規(guī)范,而且也無法使用,所以用一個(gè)for循環(huán)獲取所有的鏈接的"src"部分

image.png

其中i.get('src')就是獲取內(nèi)部src處的文本
這里我們獲取的鏈接沒有頭部,所以我們需要自行在循環(huán)中添加

所獲取到的鏈接

接下來就是最激動(dòng)人心的下載環(huán)節(jié)了,我們有兩種方式,一種是獲取所有的鏈接存放在列表中完成后依次下載,另一種就是獲取一個(gè)鏈接就開始下載,這里我們選擇第二種,

image.png

urllib.request.urlretrieve方法如圖,第一個(gè)參數(shù)是圖片鏈接,第二個(gè)是存放位置以及名字,其他的我們不管。這里選擇E盤picture為例。并且加入計(jì)數(shù)器方便給圖片命名。

image.png

urllib.request.urlretrieve(pic_link, folder_path + '\\' + str(n) + pic_link[-4:])
這里的文件名是以文件夾加上\\然后文件名并且以鏈接的最后4個(gè)字符(用作后綴)給圖片命名,就保證不會(huì)重名等問題。

最后的調(diào)整

現(xiàn)在!我們已經(jīng)能夠下載一頁圖片了,當(dāng)然這還不夠,我們的目標(biāo)是星辰大海~~

首先點(diǎn)擊其他頁,會(huì)發(fā)現(xiàn)地址欄有變化(加上了頁碼)

image.png
(頁碼后面的#comments不用管)
地址欄帶上了后綴,所以這里我們的思路是將上面的全部代碼打包成一個(gè)函數(shù),將地址欄用format和range函數(shù)寫成
urls = ['http://jandan.net/ooxx/page-{}'.format(str(i)) for i in range(起始頁碼,終止頁碼)]的形式,再利用for循環(huán)遍歷其中就可以下載我們所需頁碼的圖片啦~
說干就干,這里我直接上最終的代碼

import requests
import urllib.request
import time
from bs4 import BeautifulSoup

# url = 'http://jandan.net/ooxx'
urls = ['http://jandan.net/ooxx/page-{}'.format(str(i)) for i in range(256,258)]  # 鏈接列表
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}


n = 0 # 計(jì)數(shù)器
def pic_download(url):
    time.sleep(2) # 每次運(yùn)行暫停2秒
    global n  # 將n變?yōu)槿肿兞糠奖忝?    wb_data = requests.get(url,headers = headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')  # 解析網(wǎng)頁
    img = soup.select('div > div.row > div.text > p > img')  # 尋找img元素

    folder_path = r'E:\Picture'  # 存放文件夾所在位置(此處需先創(chuàng)建文件夾)
    for i in img:  
        pic_link = ('http:' + i.get('src')) # 將所獲得的鏈接加上頭部
        urllib.request.urlretrieve(pic_link, folder_path + '\\' + str(n) + pic_link[-4:])  # 開始下載
        n = n + 1  # 每運(yùn)行一次n+1
        print('download:'+pic_link)

    print('===========下一頁================')

for i in urls:  # 將鏈接列表循環(huán)
    pic_download(i)

最終效果圖

最終效果

結(jié)束語

1.這個(gè)教程適合的對象為零基礎(chǔ)或者有一點(diǎn)點(diǎn)基礎(chǔ)的想學(xué)爬蟲無從下手的同學(xué),所以用到的方法盡量少且簡單,希望大佬們輕噴,有錯(cuò)誤可以指正
2.有點(diǎn)矛盾的是說是零基礎(chǔ),但也得掌握點(diǎn)比如print,=賦值,for循環(huán),字符串的方法這些最最基礎(chǔ)的東西,這里如果再一一講解那本文就太臃腫了,廖雪峰老師的教程,小甲魚的視頻都是很不錯(cuò)的自學(xué)教材。
3.爬蟲涉及到的知識(shí)點(diǎn)非常非常多,一篇文章遠(yuǎn)遠(yuǎn)說不夠,例如說你會(huì)爬蟲,那么網(wǎng)站就有反爬蟲,當(dāng)然高手還有反反爬蟲,這之間的斗爭就像武林競爭一般,你有一劍我有一式來來往往真的非??犰?,所以這篇文章更多的我想是激發(fā)各位學(xué)爬蟲的熱情。
4.我知道肯定文中有很多地方對于新手來說還是不太好理解,比如pic_link[-4:]是什么意思,selector到底怎么選等等問題,但我要說的是希望大家碰到問題應(yīng)該學(xué)會(huì)使用搜索引擎(即使是百度也可以),學(xué)會(huì)檢索信息就能解決很多問題,并且收獲地更多,還有比如說debug,幫助文檔,Python Console的使用等等。
5.我也是個(gè)新手,爬蟲之路也許才剛走到門檻上面,希望和大家共同進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流,請勿用于任何商業(yè)用途! 一、前言 強(qiáng)烈建議:請?jiān)陔娔X的陪同下,閱讀本文...
    Bruce_Szh閱讀 12,988評論 6 28
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,789評論 25 709
  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎(chǔ)第4章 從Scrapy到移動(dòng)應(yīng)用第5章...
    SeanCheney閱讀 15,254評論 13 61
  • 聲明:本欄目所使用的素材都是凱哥學(xué)堂VIP學(xué)員所寫,學(xué)員有權(quán)匿名,對文章有最終解釋權(quán);凱哥學(xué)堂旨在促進(jìn)VIP學(xué)員互...
    凱哥學(xué)堂閱讀 1,623評論 0 1
  • 如何學(xué)好英語——語感記單詞(上)目前大眾單詞記法 對于英語學(xué)習(xí)者來說,記英語單詞想必是很多人的第一大心結(jié),總是感覺...
    靈子門閱讀 993評論 0 5

友情鏈接更多精彩內(nèi)容