国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python爬蟲入門教程 4-100 美空網(wǎng)未登錄圖片爬取

Kross / 2745人閱讀

摘要:爬蟲分析首先,我們已經(jīng)爬取到了多的用戶個(gè)人主頁(yè),我通過(guò)鏈接拼接獲取到了在這個(gè)頁(yè)面中,咱們要找?guī)讉€(gè)核心的關(guān)鍵點(diǎn),發(fā)現(xiàn)平面拍攝點(diǎn)擊進(jìn)入的是圖片列表頁(yè)面。

簡(jiǎn)介

上一篇寫的時(shí)間有點(diǎn)長(zhǎng)了,接下來(lái)繼續(xù)把美空網(wǎng)的爬蟲寫完,這套教程中編寫的爬蟲在實(shí)際的工作中可能并不能給你增加多少有價(jià)值的技術(shù)點(diǎn),因?yàn)樗皇且惶兹腴T的教程,老鳥你自動(dòng)繞過(guò)就可以了,或者帶帶我也行。

爬蟲分析

首先,我們已經(jīng)爬取到了N多的用戶個(gè)人主頁(yè),我通過(guò)鏈接拼接獲取到了

http://www.moko.cc/post/da39d...

在這個(gè)頁(yè)面中,咱們要找?guī)讉€(gè)核心的關(guān)鍵點(diǎn),發(fā)現(xiàn)平面拍攝點(diǎn)擊進(jìn)入的是圖片列表頁(yè)面。
接下來(lái)開始代碼走起。

獲取所有列表頁(yè)面

我通過(guò)上篇博客已經(jīng)獲取到了70000(實(shí)際測(cè)試50000+)用戶數(shù)據(jù),讀取到python中。

這個(gè)地方,我使用了一個(gè)比較好用的python庫(kù)pandas,大家如果不熟悉,先模仿我的代碼就可以了,我把注釋都寫完整。

import pandas as pd

# 用戶圖片列表頁(yè)模板
user_list_url = "http://www.moko.cc/post/{}/list.html"
# 存放所有用戶的列表頁(yè)
user_profiles = []


def read_data():
    # pandas從csv里面讀取數(shù)據(jù)
    df = pd.read_csv("./moko70000.csv")   #文件在本文末尾可以下載
    # 去掉昵稱重復(fù)的數(shù)據(jù)
    df = df.drop_duplicates(["nikename"])
    # 按照粉絲數(shù)目進(jìn)行降序
    profiles = df.sort_values("follows", ascending=False)["profile"]

    for i in profiles:
        # 拼接鏈接
        user_profiles.append(user_list_url.format(i))

if __name__ == "__main__":
    read_data()
    print(user_profiles)

數(shù)據(jù)已經(jīng)拿到,接下來(lái)我們需要獲取圖片列表頁(yè)面,找一下規(guī)律,看到重點(diǎn)的信息如下所示,找對(duì)位置,就是正則表達(dá)式的事情了。

快速的編寫一個(gè)正則表達(dá)式

.*?((d+?))

引入re,requests模塊

import requests
import re
# 獲取圖片列表頁(yè)面
def get_img_list_page():
    # 固定一個(gè)地址,方便測(cè)試
    test_url = "http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html"
    response = requests.get(test_url,headers=headers,timeout=3)
    page_text = response.text
    pattern = re.compile("

.*?((d+?))

") # 獲取page_list page_list = pattern.findall(page_text)

運(yùn)行得到結(jié)果

[("/post/da39db43246047c79dcaef44c201492d/category/304475/1.html", "85"), ("/post/da39db43246047c79dcaef44c201492d/category/304476/1.html", "2"), ("/post/da39db43246047c79dcaef44c201492d/category/304473/1.html", "0")]

繼續(xù)完善代碼,我們發(fā)現(xiàn)上面獲取的數(shù)據(jù),有"0"的產(chǎn)生,需要過(guò)濾掉

# 獲取圖片列表頁(yè)面
def get_img_list_page():
    # 固定一個(gè)地址,方便測(cè)試
    test_url = "http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html"
    response = requests.get(test_url,headers=headers,timeout=3)
    page_text = response.text
    pattern = re.compile("

.*?((d+?))

") # 獲取page_list page_list = pattern.findall(page_text) # 過(guò)濾數(shù)據(jù) for page in page_list: if page[1] == "0": page_list.remove(page) print(page_list)

獲取到列表頁(yè)的入口,下面就要把所有的列表頁(yè)面全部拿到了,這個(gè)地方需要點(diǎn)擊下面的鏈接查看一下

http://www.moko.cc/post/da39d...

本頁(yè)面有分頁(yè),4頁(yè),每頁(yè)顯示數(shù)據(jù)4*7=28
所以,基本計(jì)算公式為 math.ceil(85/28)
接下來(lái)是鏈接生成了,我們要把上面的鏈接,轉(zhuǎn)換成

http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/category/304475/1.html
http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/category/304475/2.html
http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/category/304475/3.html
http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/category/304475/4.html
    page_count =  math.ceil(int(totle)/28)+1
    for i in range(1,page_count):
        # 正則表達(dá)式進(jìn)行替換
        pages = re.sub(r"d+?.html",str(i)+".html",start_page)
        all_pages.append(base_url.format(pages))

當(dāng)我們回去到足夠多的鏈接之后,對(duì)于初學(xué)者,你可以先干這么一步,把這些鏈接存儲(chǔ)到一個(gè)csv文件中,方便后續(xù)開發(fā)

# 獲取所有的頁(yè)面
def get_all_list_page(start_page,totle):

    page_count =  math.ceil(int(totle)/28)+1
    for i in range(1,page_count):
        pages = re.sub(r"d+?.html",str(i)+".html",start_page)
        all_pages.append(base_url.format(pages))

    print("已經(jīng)獲取到{}條數(shù)據(jù)".format(len(all_pages)))
    if(len(all_pages)>1000):
        pd.DataFrame(all_pages).to_csv("./pages.csv",mode="a+")
        all_pages.clear()

讓爬蟲飛一會(huì),我這邊拿到了80000+條數(shù)據(jù)

好了,列表數(shù)據(jù)有了,接下來(lái),我們繼續(xù)操作這個(gè)數(shù)據(jù),是不是感覺(jué)速度有點(diǎn)慢,代碼寫的有點(diǎn)LOW,好吧,我承認(rèn)這是給新手寫的其實(shí)就是懶,我回頭在用一篇文章把他給改成面向?qū)ο蠛投嗑€程的

我們接下來(lái)基于爬取到的數(shù)據(jù)再次進(jìn)行分析

例如 http://www.moko.cc/post/nimus... 這個(gè)頁(yè)面中,我們需要獲取到,紅色框框的地址,為什么要或者這個(gè)?因?yàn)辄c(diǎn)擊這個(gè)圖片之后進(jìn)入里面才是完整的圖片列表。

我們還是應(yīng)用爬蟲獲取
幾個(gè)步驟

循環(huán)我們剛才的數(shù)據(jù)列表

抓取網(wǎng)頁(yè)源碼

正則表達(dá)式匹配所有的鏈接

def read_list_data():
    # 讀取數(shù)據(jù)
    img_list = pd.read_csv("./pages.csv",names=["no","url"])["url"]

    # 循環(huán)操作數(shù)據(jù)
    for img_list_page in img_list:
        try:
            response = requests.get(img_list_page,headers=headers,timeout=3)
        except Exception as e:
            print(e)
            continue
        # 正則表達(dá)式獲取圖片列表頁(yè)面
        pattern = re.compile("VIEW MORE")
        img_box = pattern.findall(response.text)

        need_links = []  # 待抓取的圖片文件夾
        for img in img_box:
            need_links.append(img)

            # 創(chuàng)建目錄
            file_path = "./downs/{}".format(str(img[0]).replace("/", ""))

            if not os.path.exists(file_path):
                os.mkdir(file_path)  # 創(chuàng)建目錄

        for need in need_links:
            # 獲取詳情頁(yè)面圖片鏈接
            get_my_imgs(base_url.format(need[1]), need[0])

上面代碼幾個(gè)重點(diǎn)地方

        pattern = re.compile("VIEW MORE")
        img_box = pattern.findall(response.text)

        need_links = []  # 待抓取的圖片文件夾
        for img in img_box:
            need_links.append(img)

獲取到抓取目錄,這個(gè)地方,我匹配了兩個(gè)部分,主要用于創(chuàng)建文件夾
創(chuàng)建文件夾需要用到 os 模塊,記得導(dǎo)入一下

            # 創(chuàng)建目錄
            file_path = "./downs/{}".format(str(img[0]).replace("/", ""))

            if not os.path.exists(file_path):
                os.mkdir(file_path)  # 創(chuàng)建目錄

獲取到詳情頁(yè)面圖片鏈接之后,在進(jìn)行一次訪問(wèn)抓取所有圖片鏈接

#獲取詳情頁(yè)面數(shù)據(jù)
def get_my_imgs(img,title):
    print(img)
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}
    response = requests.get(img, headers=headers, timeout=3)
    pattern = re.compile("")
    all_imgs = pattern.findall(response.text)
    for download_img in all_imgs:
        downs_imgs(download_img,title)

最后編寫一個(gè)圖片下載的方法,所有的代碼完成,圖片保存本地的地址,用的是時(shí)間戳。


def downs_imgs(img,title):

    headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}
    response = requests.get(img,headers=headers,timeout=3)
    content = response.content
    file_name = str(int(time.time()))+".jpg"
    file = "./downs/{}/{}".format(str(title).replace("/","").strip(),file_name)
    with open(file,"wb+") as f:
        f.write(content)

    print("完畢")

運(yùn)行代碼,等著收?qǐng)D

代碼運(yùn)行一下,發(fā)現(xiàn)報(bào)錯(cuò)了

原因是路徑的問(wèn)題,在路徑中出現(xiàn)了...這個(gè)特殊字符,我們需要類似上面處理/的方式處理一下。自行處理一下吧。

數(shù)據(jù)獲取到,就是這個(gè)樣子的

代碼中需要完善的地方

代碼分成了兩部分,并且是面向過(guò)程的,非常不好,需要改進(jìn)

網(wǎng)絡(luò)請(qǐng)求部分重復(fù)代碼過(guò)多,需要進(jìn)行抽象,并且加上錯(cuò)誤處理,目前是有可能報(bào)錯(cuò)的

代碼單線程,效率不高,可以參照前兩篇文章進(jìn)行改進(jìn)

沒(méi)有模擬登錄,最多只能爬取6個(gè)圖片,這也是為什么先把數(shù)據(jù)保存下來(lái)的原因,方便后期直接改造

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/19528.html

相關(guān)文章

  • Python爬蟲入門教程 4-100 美空網(wǎng)未登錄圖片爬取

    摘要:爬蟲分析首先,我們已經(jīng)爬取到了多的用戶個(gè)人主頁(yè),我通過(guò)鏈接拼接獲取到了在這個(gè)頁(yè)面中,咱們要找?guī)讉€(gè)核心的關(guān)鍵點(diǎn),發(fā)現(xiàn)平面拍攝點(diǎn)擊進(jìn)入的是圖片列表頁(yè)面。 簡(jiǎn)介 上一篇寫的時(shí)間有點(diǎn)長(zhǎng)了,接下來(lái)繼續(xù)把美空網(wǎng)的爬蟲寫完,這套教程中編寫的爬蟲在實(shí)際的工作中可能并不能給你增加多少有價(jià)值的技術(shù)點(diǎn),因?yàn)樗皇且惶兹腴T的教程,老鳥你自動(dòng)繞過(guò)就可以了,或者帶帶我也行。 爬蟲分析 首先,我們已經(jīng)爬取到了N多的...

    netmou 評(píng)論0 收藏0
  • Python爬蟲入門教程 4-100 美空網(wǎng)未登錄圖片爬取

    摘要:爬蟲分析首先,我們已經(jīng)爬取到了多的用戶個(gè)人主頁(yè),我通過(guò)鏈接拼接獲取到了在這個(gè)頁(yè)面中,咱們要找?guī)讉€(gè)核心的關(guān)鍵點(diǎn),發(fā)現(xiàn)平面拍攝點(diǎn)擊進(jìn)入的是圖片列表頁(yè)面。 簡(jiǎn)介 上一篇寫的時(shí)間有點(diǎn)長(zhǎng)了,接下來(lái)繼續(xù)把美空網(wǎng)的爬蟲寫完,這套教程中編寫的爬蟲在實(shí)際的工作中可能并不能給你增加多少有價(jià)值的技術(shù)點(diǎn),因?yàn)樗皇且惶兹腴T的教程,老鳥你自動(dòng)繞過(guò)就可以了,或者帶帶我也行。 爬蟲分析 首先,我們已經(jīng)爬取到了N多的...

    JowayYoung 評(píng)論0 收藏0
  • Python爬蟲入門教程 3-100 空網(wǎng)數(shù)據(jù)爬取

    摘要:美空網(wǎng)數(shù)據(jù)簡(jiǎn)介從今天開始,我們嘗試用篇博客的內(nèi)容量,搞定一個(gè)網(wǎng)站叫做美空網(wǎng)網(wǎng)址為,這個(gè)網(wǎng)站我分析了一下,我們要爬取的圖片在下面這個(gè)網(wǎng)址然后在去分析一下,我需要找到一個(gè)圖片列表頁(yè)面是最好的,作為一個(gè)勤勞的爬蟲,我找到了這個(gè)頁(yè)面列表頁(yè)面被我找 1.美空網(wǎng)數(shù)據(jù)-簡(jiǎn)介 從今天開始,我們嘗試用2篇博客的內(nèi)容量,搞定一個(gè)網(wǎng)站叫做美空網(wǎng)網(wǎng)址為:http://www.moko.cc/, 這個(gè)網(wǎng)站我...

    PingCAP 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<