米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

米スペースネットワークをはじめ----写真をログに記録されていません

それだけだから少し長い上に書かれ、その後、仕上げ爬虫類米スペースネットワークに引き続き、このチュートリアルで書かれた爬虫類は、あなたの実際の作業に多くの貴重な技術的なポイントの増加を与えないかもしれませんチュートリアルのセットを取得すると、自動的にそれに古い鳥を回避、またはバンドは、私は私ができる知っています。

米スペースネットワークの写真をログに記録されていない----爬虫類分析

まず第一に、私たちはユーザーの個人ホームページのN番号にクロールする必要があり、私はステッチへのリンクを取得します

http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

このページでは、我々はいくつかの重要なコア・ポイントを探している、我々が見つかりました。平面拍摄画像一覧ページにクリックしてください。
コードの先頭から行くの隣にあります。

すべてのページのリストを取得します。

私は、ブログの記事7万(実際のテスト50000+)にすることによって取得する必要がpythonで読み取られるユーザデータ。

この場所は、私はあなたが最初に、精通していないことに私のコードをコピーして、私は完全にコメントを書くことがあれば、より便利なPythonライブラリパンダを使用しました。

import pandas as pd

# 用户图片列表页模板
user_list_url = "http://www.moko.cc/post/{}/list.html"
# 存放所有用户的列表页
user_profiles = []

def read_data():
    # pandas从csv里面读取数据
    df = pd.read_csv("./moko70000.csv")   #文件在本文末尾可以下载
    # 去掉昵称重复的数据
    df = df.drop_duplicates(["nikename"])
    # 按照粉丝数目进行降序
    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)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

データはすでに、我々はいくつかの法則を見つけ、ピクチャリストのページを取得する必要がありました、次の優先順位に示す情報を参照して、正しい位置を見つけ、正規表現は何ですか。

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

高速な正規表現を書きます
<p class="title"><a hidefocus="ture".*?href="(.*?)" class="mwC u">.*?\((\d+?)\)</a></p>

再導入、モジュールを要求

import requests
import re
# 获取图片列表页面
def get_img_list_page():
    # 固定一个地址,方便测试
    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('<p class="title"><a hidefocus="ture".*?href="(.*?)" class="mwC u">.*?\((\d+?)\)</a></p>')
    # 获取page_list
    page_list = pattern.findall(page_text)

取得結果を実行します

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

コードを改善するために続けて、我々は、上記で得られたデータは、フィルタリングの必要性を「0」をそこに持っていることがわかりました

# 获取图片列表页面
def get_img_list_page():
    # 固定一个地址,方便测试
    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('<p class="title"><a hidefocus="ture".*?href="(.*?)" class="mwC u">.*?\((\d+?)\)</a></p>')
    # 获取page_list
    page_list = pattern.findall(page_text)
    # 过滤数据
    for page in page_list:
        if page[1] == '0':
            page_list.remove(page)
    print(page_list)

エントランスは、ページのリストを取得するために、以下はすべて、すべてのページの一覧を取得する必要があり、この場所は、以下のリンクを見てする必要があります

http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/category/304475/1.html

このページには、タブ、4、パーデータがある4*7=28項目は、
だから、基本的な式はmath.ceil(85/28)
、次のリンクが生成され、我々は、上記のリンクをしたいが、変換

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):
        # 正则表达式进行替换
        pages = re.sub(r'\d+?\.html',str(i)+".html",start_page)
        all_pages.append(base_url.format(pages))

私たちは、リンクの十分な数に戻るときは、スタータ用、あなたが最初にそうすることでステップ実行することができ、CSVファイルに保存されているこれらのリンクは、その後の開発を容易にするために、

# 获取所有的页面
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("已经获取到{}条数据".format(len(all_pages)))
    if(len(all_pages)>1000):
        pd.DataFrame(all_pages).to_csv("./pages.csv",mode="a+")
        all_pages.clear()

爬虫類はしばらく飛んでみよう、私はここで、データの800​​00+枚を得ました

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

まあ、それは少し遅い感じていない、そして、我々は、このデータを操作し続け、LOW書き込むためのコードのビットをデータのリストを持って、[OK]を、私はこれが新しい手書きで認める其实就是懒、私は内の記事で振り返ります彼は、オブジェクト指向やマルチスレッドに与えました

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

私たちは、次のデータをクロールに再度分析しました

例えば http://www.moko.cc/post/nimusi/category/31793/1.htmlこのページは、我々は赤のアドレスボックスに取得する必要があり、あるいは、なぜこの?内部に入っているので、この画像をクリックした後の画像の完全なリストです。

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

我々はまだ取得クローラを使用する
いくつかの手順を

  1. 私達はちょうどサイクルデータリスト
  2. ソースは、ウェブをクロール
  3. すべてのリンクにマッチする正規表現
def read_list_data():
    # 读取数据
    img_list = pd.read_csv("./pages.csv",names=["no","url"])["url"]

    # 循环操作数据
    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
        # 正则表达式获取图片列表页面
        pattern = re.compile('<a hidefocus="ture" alt="(.*?)".*? href="(.*?)".*?>VIEW MORE</a>')
        img_box = pattern.findall(response.text)

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

            # 创建目录
            file_path = "./downs/{}".format(str(img[0]).replace('/', ''))

            if not os.path.exists(file_path):
                os.mkdir(file_path)  # 创建目录

        for need in need_links:
            # 获取详情页面图片链接
            get_my_imgs(base_url.format(need[1]), need[0])

いくつかの主要な場所上記のコード

        pattern = re.compile('<a hidefocus="ture" alt="(.*?)".*? href="(.*?)".*?>VIEW MORE</a>')
        img_box = pattern.findall(response.text)

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

ディレクトリ、この場所をクロールするには、Get、私は主にフォルダを作成するために使用される二つの部分、一致
osモジュールを使用する必要があるフォルダを作成し、それをインポートすることを忘れないでください

            # 创建目录
            file_path = "./downs/{}".format(str(img[0]).replace('/', ''))

            if not os.path.exists(file_path):
                os.mkdir(file_path)  # 创建目录

詳細ページのリンクに画像を取得した後、すべての画像のリンクをクロールする訪問中

#获取详情页面数据
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('<img src2="(.*?)".*?>')
    all_imgs = pattern.findall(response.text)
    for download_img in all_imgs:
        downs_imgs(download_img,title)

ダウンロードに絵を書くための最後の方法は、すべてのコードは、画像がタイムスタンプで、ローカルアドレスに保存され、完了です。


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("完毕")
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

図を受け取るために待っているコードを実行します。

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

コード実行し、エラーを検出しました

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

その理由は、パスの問題は、...パスにこの特殊文字があったことを、私たちは、上記に同様のプロセスを必要とされ/、それを処理する方法。それについての裁量に依存します。

このようなものですデータ収集

米スペースネットワークがログに記録されていない写真をクロール:Pythonの爬虫類[4]は入門

コードが完成する必要があります

  1. コードは2つの部分に分割され、プロセス指向、非常に悪い、改善の必要性であります
  2. 過度の一部重なっネットワーク要求コード、アブストラクト、およびエラー処理を追加し、現在可能に与えられています
  3. シングルスレッドのコードが効率的ではありません、あなたが改善するために、前の二つの記事を参照することができます
  4. 何アナログは、最初は、理由の下にデータを保存後の直接変換を容易にする理由である、6枚の写真を撮るために登るために、ログインしていません

おすすめ

転載: blog.51cto.com/14445003/2423287