姉妹は、サイトマップをクロール

小さなプロジェクトを行うための最初の爬虫類は、コードは非常に荒れている、と私はちょうど最初のページに設定されているすべての画像がつかんで
、それをつかむした後、実際にフリップキャッチは、あまりにも多くの問題を考えて、それを学んだことができますので、追いつい言いますコンピューター収納スペースの無駄、実際の戦闘の良い眺めがある姉妹か何か、いじめる姉妹、毎日の戦闘について話をするのガールフレンドとして、黄色のチャートを参照するには時間があります。
このナンセンスのよう:


でサイトをクロール:https://www.mzitu.com/tag/youhuo/こと
のは、サイトのホームページを開いてみましょう:

16825884-2aca502125e19978.png

多くの妹は、私が持っているものを私に与え、私を選んでいないよさそうです。
ステップ、オープンな開発ページバイステップ:


16825884-9e41c4aeda40dde6.png

アトラスブルーは、次のように我々はHREF下記のアドレスを抽出したい最初の部分は第2、第3 .......たです。

import requests
from requests.exceptions import RequestException

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
           "Referer": "http://www.mzitu.com/all/",
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
#请求头的这个Referer一定要加,妹子网有反爬,反正粘贴复制就行,多加几个信息无所谓
def get_page(url):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print(response.text)
            return response.text
        return None
    except RequestException:
        print('获取索引页失败')
        return None

def main():
    url = 'https://www.mzitu.com/tag/youhuo/'
    get_page(url)


if __name__ == '__main__':
    main()

私たちは、簡単に出力を得ることができます:


16825884-ab1afc90ecf43e59.png

結果としてHTML、赤いボックスのこの分析は、明らかに私たちは、各アトラスのアドレスを取得したいです。
私たちは、アトラスアドレスを抽出を開始するには、「スープ」を引用しました:

import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
           "Referer": "http://www.mzitu.com/all/",
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

def get_page(url):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print(response.text)
            return response.text
        return None
    except RequestException:
        print('获取索引页失败')
        return None

def parse_page(html):
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('#pins li')
    for link in items:
        href = link.a['href']
        print(href)
    # print(items)


def main():
    url = 'https://www.mzitu.com/tag/youhuo/'
    html = get_page(url)
    parse_page(html)


if __name__ == '__main__':
    main()

BeautifulSoupライブラリは非常に強力ですが、私はより多くを学ぶことを決めた、スープの出力書籍リストは、それが第一の出力に通過しなければならない次のように入力し、*:

16825884-8a4b129e1cf4f832.png

私たちは、各アトラスのアドレスを持っアトラスを開いて参照してください。
16825884-172ee74158656676.png

各アトラスの詳細ページ、地図のみが、以下のインデックスがあり、その後、問題に次のページの詳細ページを考慮する必要があります。


16825884-cb7f2deffcd64e91.png

16825884-bd577ac4b3de7906.png

16825884-f4c24030f3b7ff03.png
のアドレスアトラス第三パネル

異なるアトラス同じアドレス配置がありますが、私たちは、詳細は各アトラスページの写真で循環リストを作成することができます:

import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
           "Referer": "http://www.mzitu.com/all/",
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

def get_page(url):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print(response.text)
            return response.text
        return None
    except RequestException:
        print('获取索引页失败')
        return None

def parse_page(html):
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('#pins li')
    for link in items:
        href = link.a['href']
        get_detail_page(href)

    # print(items)

def get_detail_page(href):
    for i in range(1,100):
        detail_url = href + '/' + str(i)
        if requests.get(detail_url, headers=headers).status_code == 200:
            print(detail_url)
        else:
            print('已至末尾页')
            return None

    response = requests.get()

def main():
    url = 'https://www.mzitu.com/tag/youhuo/'
    html = get_page(url)
    parse_page(html)


if __name__ == '__main__':
    main()

私は100に周期を設定し、少し説明、絵一部46がまあ、私は200は通常のURLではなく、私が得る200の終了時にURLであるかどうかを判断するために、ページのステータスコードを追加したという理由だけで、私たち各画像は、ページから取り出したすべての詳細については、サイト内で設定することができます。


16825884-cecdcd5ff04449d6.png
16825884-d9a6b515851050f7.png

次のステップは、WebサイトのURLに対応するHTMLを介して取得することです:

import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
          "Referer": "http://www.mzitu.com/all/",
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

def get_page(url):
   try:
       response = requests.get(url, headers=headers)
       if response.status_code == 200:
           # print(response.text)
           return response.text
       return None
   except RequestException:
       print('获取索引页失败')
       return None

def parse_page(html):
   soup = BeautifulSoup(html, 'lxml')
   items = soup.select('#pins li')
   for link in items:
       href = link.a['href']
       get_detail_page(href)

   # print(items)

def get_detail_page(href):
   for i in range(1,100):
       detail_url = href + '/' + str(i)
       if requests.get(detail_url, headers=headers).status_code == 200:
           parse_detail_page(detail_url)
       else:
           print('已至末尾页')
           return None

def parse_detail_page(detail_url):
   try:
       response = requests.get(detail_url, headers=headers)
       if response.status_code == 200:
           print('获取详情页成功')
           detail_html = response.text
           print(detail_html)
           # get_image(detail_html)
       return None
   except RequestException:
       print('获取详情页失败')
       return None

# def get_image(detail_html):


def main():
   url = 'https://www.mzitu.com/tag/youhuo/'
   html = get_page(url)
   parse_page(html)




if __name__ == '__main__':
   main()

各HTMLページの詳細を取得します。


16825884-8bc32ff25418b906.png

美しいスープは、その後出て解析することができます:

import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
           "Referer": "http://www.mzitu.com/all/",
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

def get_page(url):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            # print(response.text)
            return response.text
        return None
    except RequestException:
        print('获取索引页失败')
        return None

def parse_page(html):
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('#pins li')
    for link in items:
        href = link.a['href']
        get_detail_page(href)

    # print(items)

def get_detail_page(href):
    for i in range(1,100):
        detail_url = href + '/' + str(i)
        if requests.get(detail_url, headers=headers).status_code == 200:
            parse_detail_page(detail_url)
        else:
            print('已至末尾页')
            return None

def parse_detail_page(detail_url):
    try:
        response = requests.get(detail_url, headers=headers)
        if response.status_code == 200:
            print('获取详情页成功')
            detail_html = response.text
            # print(detail_html)
            get_image(detail_html)
        return None
    except RequestException:
        print('获取详情页失败')
        return None

def get_image(detail_html):
    soup = BeautifulSoup(detail_html, 'lxml')
    items= soup.select('.main-image')
    # print(items)
    for item in items:
        return item.img['src']


def main():
    url = 'https://www.mzitu.com/tag/youhuo/'
    html = get_page(url)
    parse_page(html)




if __name__ == '__main__':
    main()
16825884-b762598d53af457c.png

ここでは、ここで、保存画像で完全なコードで、モジュラーコードがポストさらなる改善、高いものではありません。

import requests
import os
from hashlib import md5
from requests.exceptions import RequestException
from bs4 import BeautifulSoup

headers = {'If-None-Match': 'W/"5cc2cd8f-2c58"',
          "Referer": "http://www.mzitu.com/all/",
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 SafarMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

def get_page(url):
   try:
       response = requests.get(url, headers=headers)
       if response.status_code == 200:
           # print(response.text)
           return response.text
       return None
   except RequestException:
       print('获取索引页失败')
       return None

def parse_page(html):
   soup = BeautifulSoup(html, 'lxml')
   items = soup.select('#pins li')
   for link in items:
       href = link.a['href']
       get_detail_page(href)

   # print(items)

def get_detail_page(href):
   for i in range(1,100):
       detail_url = href + '/' + str(i)
       if requests.get(detail_url, headers=headers).status_code == 200:
           parse_detail_page(detail_url)
       else:
           print('已至末尾页')
           return None

def parse_detail_page(detail_url):
   try:
       response = requests.get(detail_url, headers=headers)
       if response.status_code == 200:
           print('获取详情页成功')
           detail_html = response.text
           # print(detail_html)
           get_image(detail_html)
       return None
   except RequestException:
       print('获取详情页失败')
       return None

def get_image(detail_html):
   soup = BeautifulSoup(detail_html, 'lxml')
   items= soup.select('.main-image')
   # print(items)
   for item in items:
       image = item.img['src']
       save_image(image)

def save_image(image):
   response = requests.get(image,headers=headers)
   if response.status_code == 200:
       data = response.content
       file_path = '{0}/{1}.{2}'.format(os.getcwd(), md5(data).hexdigest(), 'jpg')
       print(file_path)
       if not os.path.exists(file_path):
           with open(file_path, 'wb') as f:
               f.write(data)
               f.close()
               print('保存成功')
   else:
       print('保存失败')
       return None


def main():
   url = 'https://www.mzitu.com/tag/youhuo/'
   html = get_page(url)
   parse_page(html)




if __name__ == '__main__':
   main()
16825884-87bd9db7bb25d633.png

16825884-ba5ca51f5ee6bbed.png

ハッハッハ、戦闘にしたい、私は個人的にYYを除外し、真実を伝えます

おすすめ

転載: blog.csdn.net/weixin_33834628/article/details/90982319