PythonクローラーはBilibiliの列の写真を簡単に抽出します

requests + bs4モジュール-単純なクローラーの例-Bilibili列の写真

セクション1:ステートメント

1.クロールされた画像はすべて、Bilibiliプラットフォームに無料でダウンロードできる画像です。
2.私自身の学習ノートは市販されません。2gの写真をクロールし、バックアップの壁紙としていくつか選択した後、それらはすべて削除されました。
3.この記事に侵害がある場合は、私に連絡して記事を削除してください。

セクション2:ダウンロードリンク分析

ステーションBはコラムが多いので、検索して「鬼滅の刃みどうじ壁紙を選びました。全部で4ページあります。この記事は最初のページだけをクロールします。
レンダリングは次のとおりです。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

まず、ゴーストミビーンズの壁紙から端を這う詳細ページを見つけたい

次に、ソースコードを分析します。
(例として最初の記事を取り上げます)
ここに画像の説明を挿入します
hrefタグでハイパーリンクを見つけ、クリックして目的
ここに画像の説明を挿入します
の記事であることを確認しますただし、クロールするときは** "https:" **と組み合わせる必要があります。

次に、記事に表示されている画像のソースコードを分析します。
(例として最初の画像を取り上げます)
ここに画像の説明を挿入します
figureタグには、画像のURLが含まれています。次に、data-srcのコンテンツを抽出します。(しかし、実際にはそうではありません。コードを使用してテキストを取得する場合、そのようなコンテンツはありません。後で見ることができます)

セクション3:コードの記述

1.インポートセクション

import requests
import re
import bs4
import os

2.リクエストヘッダーを追加します

headers = {
    
    
     'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}

3.フォルダを作成します

if not os.path.exists('D:/鬼灭之刃'):
    os.mkdir('D:/鬼灭之刃')

4.カプセル化機能

def get_first_url(url):       #得到第一个url,即每一篇文章的url,结果是未遍历的
    res_1=requests.get(url=url,headers=headers)
    html_1=res_1.text
    first_url=re.findall('<li.*?<a.*?"(//w.*?search)"',html_1,re.S)
    return first_url

この機能の機能は、最初にアクセスした詳細ページを分析し、記事のリンクを構成できるコンテンツを抽出することです
(正規表現によって抽出されます)

以前にも正規表現に関する記事を書きました

ポータル

def get_second_url(url):   #得到第二个url,即文章中每个图片的url,结果是未遍历的
    res_2 = requests.get(url=url,headers=headers)
    html_2=res_2.text
    soup=bs4.BeautifulSoup(html_2,'html.parser')
    picture_list = soup.select('.img-box img')
    return picture_list

この機能の機能は、記事のコンテンツを分析し、画像リンクを形成できるコンテンツを抽出することです
(bs4を使用して抽出)

def download_picture(url,num1,i):   #下载图片
    res_3=requests.get(url=url,headers=headers)
    picture_data=res_3.content
    picture_name='img{}_{}.jpg'.format(num1,i)
    picture_path='D:/鬼灭之刃/'+picture_name
    with open(picture_path,'wb') as f:
        f.write(picture_data)
        print(picture_path,'打印成功')

この関数の機能は、画像ダウンロードしてプログレスバーを印刷することです
(最初にメイン関数を記述してから、この関数を追加するのが好きです)

def main():
    base_url='https://search.bilibili.com/article?keyword=%E9%AC%BC%E7%81%AD%E4%B9%8B%E5%88%83%E5%BC%A5%E8%B1%86%E5%AD%90%E5%A3%81%E7%BA%B8'
    fist_urls=get_first_url(base_url)
    num1=1
    for first_url in fist_urls:
        first_url='https:'+first_url
        second_url=get_second_url(first_url)
        for i in range(len(second_url)):
            picture_urls=second_url[i].get('data-src')
            picture_url='https:'+picture_urls
            download_picture(picture_url,num1,i)
        num1+=1

5.完全なコード

import requests
import re
import bs4
import os

headers = {
    
    
     'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}

#创建文件夹
if not os.path.exists('D:/鬼灭之刃'):
    os.mkdir('D:/鬼灭之刃')

def get_first_url(url):       #得到第一个url,即每一篇文章的url,结果是未遍历的
    res_1=requests.get(url=url,headers=headers)
    html_1=res_1.text
    first_url=re.findall('<li.*?<a.*?"(//w.*?search)"',html_1,re.S)
    return first_url

def get_second_url(url):   #得到第二个url,即文章中每个图片的url,结果是未遍历的
    res_2 = requests.get(url=url,headers=headers)
    html_2=res_2.text
    soup=bs4.BeautifulSoup(html_2,'html.parser')
    picture_list = soup.select('.img-box img')
    return picture_list

def download_picture(url,num1,i):   #下载图片
    res_3=requests.get(url=url,headers=headers)
    picture_data=res_3.content
    picture_name='img{}_{}.jpg'.format(num1,i)
    picture_path='D:/鬼灭之刃/'+picture_name
    with open(picture_path,'wb') as f:
        f.write(picture_data)
        print(picture_path,'打印成功')


def main():
    base_url='https://search.bilibili.com/article?keyword=%E9%AC%BC%E7%81%AD%E4%B9%8B%E5%88%83%E5%BC%A5%E8%B1%86%E5%AD%90%E5%A3%81%E7%BA%B8'
    fist_urls=get_first_url(base_url)
    num1=1
    for first_url in fist_urls:
        first_url='https:'+first_url
        second_url=get_second_url(first_url)
        for i in range(len(second_url)):
            picture_urls=second_url[i].get('data-src')
            picture_url='https:'+picture_urls
            download_picture(picture_url,num1,i)
        num1+=1


if __name__ =='__main__'    :
    main()

セクション4:補足

この時点で、テキストは終わりに近づいています。上記の小さな問題を見てみましょう。

これは解析の結果であり、これは
ここに画像の説明を挿入します
Webページを「チェック」した結果です。
ここに画像の説明を挿入します

違いがあるかどうか、または分析結果が優先されるかどうかを詳しく調べてください。

セクション5:参照ブログ投稿

参照ブログ投稿1
参照ブログ投稿2

bs4を初めて使用する場合は、私に教えてください。

おすすめ

転載: blog.csdn.net/qq_44921056/article/details/113398597