人生中第一次爬蟲...(妹子組圖)

python的介紹這里不再贅述,雖說用很多語言都能寫出爬蟲(哪怕是oc或者swift),但python毫無疑問是當(dāng)前寫爬蟲最為優(yōu)秀的語言之一。

雖說很久之前就下載了python3,PyCharm,但真正意義的學(xué)習(xí)是昨天開始的。

而且,學(xué)習(xí)python的初衷,也是為了寫一手爬蟲出去裝逼,所以那些基礎(chǔ)語法也就是大概看看,抱著用到時去谷歌的心態(tài)跳過了基礎(chǔ)學(xué)習(xí)這一相當(dāng)重要的過程(先整出一手爬蟲再說)。

爬蟲我個人認(rèn)為上手很簡單,主要有三點:網(wǎng)絡(luò)請求,文件操作,正則表達(dá)

抱著借鑒一手的心態(tài),去網(wǎng)上各種找源碼。然而,本來python3的源碼就相對較少,而且下過來大部分運行不了,各種報錯。少數(shù)運行成功也沒有成功爬取數(shù)據(jù),看來還是要靠自己啊(之所以爬不出數(shù)據(jù),原因很多,大多和爬取頁面格式改變有關(guān))。

首先確定爬取數(shù)據(jù)的目標(biāo):某個運行失敗的源碼中的目標(biāo):煎蛋妹子圖(這就很舒服了。。。)

引用一些模塊
import urllib.request 網(wǎng)絡(luò)請求相關(guān)
import os 文件操作相關(guān)
import re 正則表達(dá)相關(guān)
import random 單純的獲取隨機數(shù)

作為初學(xué)者,沒有用框架的經(jīng)驗,什么scrapy的I don't care。

下面是主要代碼(多為拷貝后修改)

首先,先寫網(wǎng)絡(luò)請求的代碼

  def url_open(url):

     req = urllib.request.Request(url)
        req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux         x86_64; rv:36.0) Gecko/20170522 Firefox/36.0')
    response = urllib.request.urlopen(req)
    return response.read()

然后去創(chuàng)建文件夾

def download_mm_img (folder='default',pages=10):
    if not os.path.exists(folder):#判斷是否存在該文件夾
        os.mkdir(folder) #新建文件夾
    os.chdir(folder) #跳轉(zhuǎn)到文件夾
    folder_top = os.getcwd() #獲取當(dāng)前工作目錄
    for i in range(pages):
        page_num -= i #遞減下載幾個網(wǎng)頁
        page_url = url + 'page-' + str(page_num) + '#comments' #組合網(wǎng)頁地址
        img_addrs = find_imgs(page_url) #獲取圖片地址
        save_imgs(img_addrs,page_num,folder) #保存圖片
        os.chdir(folder_top) #修改當(dāng)前目錄,也就是返回上一層

獲取網(wǎng)頁最新的地址

def get_page(url):
    html = url_open(url).decode('utf-8')
    pattern = r'<span class="current-comment-page">\[(\d{2})\]</span>' # 正則表達(dá)式尋找頁面地址,這里要去看網(wǎng)頁源代碼,然后根據(jù)代碼確定
    result = re.findall(pattern,html)
    page = int(result[0])
    return page

獲取圖片地址

def find_imgs(page_url):
    pattern = r'<img src="(.*?\.jpg)"'
    html = url_open(page_url).decode('utf-8')
    img_addrs = re.findall(pattern,html)
    return img_addrs

保存每個頁面的圖片

 def save_imgs(img_addrs,page_num,folder):

    if not os.path.exists(str(page_num)):#判斷是否存在該文件夾
        os.mkdir(str(page_num))

    os.chdir(str(page_num))
    count = 0;

    for i in img_addrs:
         count += 1
          if not i.startswith('http:'):
             i = 'http:' + i

    filename = str(count) + 'wylog' + str(int(random.random()*1000)) + 'wylog' +  i.split('/')[-1]
    print('wylog',filename,i)
    image = url_open(i)
    with open(filename,'wb') as f:
        f.write(image)
        f.close()

下載過來的圖片:


mm.png

源碼地址:https://github.com/wangyongy/first-python

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

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

  • 1 前言 作為一名合格的數(shù)據(jù)分析師,其完整的技術(shù)知識體系必須貫穿數(shù)據(jù)獲取、數(shù)據(jù)存儲、數(shù)據(jù)提取、數(shù)據(jù)分析、數(shù)據(jù)挖掘、...
    whenif閱讀 18,329評論 45 523
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 對象等同性是比對兩個對象非常有用的功能。但一般情況 == 操作符比對出來的結(jié)果可能并不準(zhǔn)確或并不是我們想要的,因為...
    Daeva_Song閱讀 831評論 0 1
  • 輕拂昏沉沉墻角打盹的書包 小心捧起的一朵花兒 不經(jīng)意就潤透了 幽藍(lán)色的潮 編織著花香的一簇簇亮白火苗 便細(xì)碎地閃爍...
    無風(fēng)TINO閱讀 223評論 2 3
  • 壞習(xí)慣一:吃飯吃太飽 “多吃點,再吃一點”,吃得多,就能長得高。但事實卻是相反的。人在饑餓狀態(tài)下,會促進(jìn)腦垂體更多...
    點后ifeof閱讀 2,229評論 0 1

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