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

本篇主要面向于對(duì)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)建的文件夾晃酒,按照?qǐng)D中實(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ò)翩腐,這里提供一種簡(jiǎn)單的方法膏燃,Pycharm > Setting > 左上角搜索Project Interpreter

庫的安裝

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

正式開始

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

image.png

按照?qǐng)D中的代碼鍵入,右鍵 run'ooxx',下方就會(huì)顯示
<Response [200]>
來看第8行黍衙,等號(hào)右邊的表示調(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ì)先介紹一種最初級(jí)的隱匿措施,將我們利用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)

這樣我們?cè)L問網(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è)教程適合的對(duì)象為零基礎(chǔ)或者有一點(diǎn)點(diǎn)基礎(chǔ)的想學(xué)爬蟲無從下手的同學(xué)遭垛,所以用到的方法盡量少且簡(jiǎn)單操灿,希望大佬們輕噴,有錯(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)然高手還有反反爬蟲馁启,這之間的斗爭(zhēng)就像武林競(jìng)爭(zhēng)一般芍秆,你有一劍我有一式來來往往真的非常酷炫霉颠,所以這篇文章更多的我想是激發(fā)各位學(xué)爬蟲的熱情荆虱。
4.我知道肯定文中有很多地方對(duì)于新手來說還是不太好理解克伊,比如pic_link[-4:]是什么意思,selector到底怎么選等等問題愿吹,但我要說的是希望大家碰到問題應(yīng)該學(xué)會(huì)使用搜索引擎(即使是百度也可以)犁跪,學(xué)會(huì)檢索信息就能解決很多問題,并且收獲地更多寝优,還有比如說debug枫耳,幫助文檔,Python Console的使用等等钻心。
5.我也是個(gè)新手铅协,爬蟲之路也許才剛走到門檻上面,希望和大家共同進(jìn)步痒给!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苍柏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子突颊,更是在濱河造成了極大的恐慌潘悼,老刑警劉巖爬橡,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糙申,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缕陕,警方通過查閱死者的電腦和手機(jī)疙挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門铐然,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沥阳,你說我怎么就攤上這事自点。” “怎么了功炮?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵死宣,是天一觀的道長(zhǎng)碴开。 經(jīng)常有香客問我博秫,道長(zhǎng)眶掌,這世上最難降的妖魔是什么朴爬? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任召噩,我火速辦了婚禮,結(jié)果婚禮上具滴,老公的妹妹穿的比我還像新娘构韵。我一直安慰自己,他們只是感情好疲恢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棚愤,像睡著了一般萎攒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刃永,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天斯够,我揣著相機(jī)與錄音喧锦,去河邊找鬼。 笑死束亏,一個(gè)胖子當(dāng)著我的面吹牛阵具,可吹牛的內(nèi)容都是我干的定铜。 我是一名探鬼主播揣炕,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼东跪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虽填!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涩惑,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跛蛋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體押框,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橡伞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年兑徘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羡洛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崭闲,死狀恐怖威蕉,靈堂內(nèi)的尸體忽然破棺而出韧涨,到底是詐尸還是另有隱情侮繁,我是刑警寧澤翘魄,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布暑竟,位于F島的核電站,受9級(jí)特大地震影響罗岖,放射性物質(zhì)發(fā)生泄漏腹躁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一哑了、第九天 我趴在偏房一處隱蔽的房頂上張望烧颖。 院中可真熱鬧炕淮,春花似錦、人聲如沸们镜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胞皱。三九已至九妈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宴树,已是汗流浹背晶疼。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蠢莺,地道東北人零如。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓考蕾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親肖卧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

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