Pythonでのクローラーの実践:Doubanブッククローラー

WBOY
リリース: 2023-06-11 13:33:07
オリジナル
2209 人が閲覧しました

Python は現在最も人気のあるプログラミング言語の 1 つであり、データ サイエンス、人工知能、ネットワーク セキュリティなどのさまざまな分野で広く使用されています。中でもPythonはWebクローラーの分野で優れた性能を発揮しており、多くの企業や個人がデータ収集や分析にPythonを利用しています。この記事では、Python を使用して Douban 書籍情報をクロールする方法を紹介し、読者が Python Web クローラーの実装方法とテクノロジを予備的に理解できるようにします。

まず、Douban 書籍情報クローラーでは、Python の 2 つの重要なライブラリ、urllib と beautifulsoup4 を使用する必要があります。このうち、urllib ライブラリは主にネットワーク リクエストとデータ読み取りに使用され、Beautifulsoup4 ライブラリは HTML や XML などの構造化ドキュメントを解析して必要な情報を抽出するために使用できます。これらのライブラリを使用する前に、pip コマンドを使用してインストールを完了する必要があります。インストールが完了したら、実際に戦闘を始めてみましょう。

  1. クロール対象を決定する

Python を使用してクロールする場合、まずクロール対象を明確にする必要があります。この記事の目的は、書籍のタイトル、著者、出版社、出版日、評価など、Douban 書籍の基本情報をクロールすることです。さらに、複数ページの書籍情報をクロールする必要もあります。

  1. HTML 構造の分析

クローリング対象を決定したら、Douban Books の HTML 構造をさらに分析して、必要な情報の場所と特徴を判断する必要があります。 Chrome や Firefox などのブラウザに付属の開発者ツールを使用して、ページのソース コードを表示できます。 HTML 構造を観察することで、クロールする必要があるタグと属性を見つけて、それらを実装する Python コードを作成できます。

  1. コードの記述

次に、Douban ブック クローラーのコードを Python で記述します。コードの核心は次のとおりです:

  • ネットワーク リクエストを送信して HTML ページを取得します;
  • HTML ドキュメントを解析して必要な情報を抽出します;
  • データ。

以下は完全なコードです:

import urllib.request
from bs4 import BeautifulSoup

url = 'https://book.douban.com/top250'
books = []

def get_html(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'}
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def parse_html(html):
    soup = BeautifulSoup(html,'html.parser')
    book_list_soup = soup.find('div', attrs={'class': 'article'})
    for book_soup in book_list_soup.find_all('table'):
        book_title_soup = book_soup.find('div', attrs={'class': 'pl2'})
        book_title_link = book_title_soup.find('a')
        book_title = book_title_link.get('title')
        book_url = book_title_link.get('href')
        book_info_soup = book_soup.find('p', attrs={'class': 'pl'})
        book_info = book_info_soup.string.strip()
        book_rating_num_soup = book_soup.find('span', attrs={'class': 'rating_nums'})
        book_rating_num = book_rating_num_soup.string.strip()
        book_rating_people_num_span_soup = book_soup.find('span', attrs={'class': 'pl'})
        book_rating_people_num = book_rating_people_num_span_soup.string.strip()[1:-4]
        book_author_and_publish_soup = book_soup.find('p',attrs={'class':'pl'}).next_sibling.string.strip()
        book_author_and_publish = book_author_and_publish_soup.split('/')
        book_author = book_author_and_publish[0]
        book_publish = book_author_and_publish[-3]
        book_year = book_author_and_publish[-2]
        books.append({
        'title': book_title,
        'url': book_url,
        'info': book_info,
        'author':book_author,
        'publish':book_publish,
        'year':book_year,
        'rating_num':book_rating_num,
        'rating_people_num':book_rating_people_num
        })

def save_data():
    with open('douban_top250.txt','w',encoding='utf-8') as f:
        for book in books:
            f.write('书名:{0}
'.format(book['title']))
            f.write('链接:{0}
'.format(book['url']))
            f.write('信息:{0}
'.format(book['info']))
            f.write('作者:{0}
'.format(book['author']))
            f.write('出版社:{0}
'.format(book['publish']))
            f.write('出版年份:{0}
'.format(book['year']))
            f.write('评分:{0}
'.format(book['rating_num']))
            f.write('评分人数:{0}

'.format(book['rating_people_num']))

if __name__ == '__main__':
    for i in range(10):
        start = i*25
        url = 'https://book.douban.com/top250?start={0}'.format(start)
        html = get_html(url)
        parse_html(html)
    save_data()
ログイン後にコピー

コード分析:

まず、メイン Web サイトの URL と空のリスト Books (書籍の保存に使用されます) を定義します。情報) 。次に、リクエストを送信して HTML ページを取得する get_html 関数を作成します。この関数では、Web サイトによってブロックされないように、ブラウザーがリクエストを送信することをシミュレートするリクエスト ヘッダーを設定します。 urllib ライブラリの Request メソッドを使用してリクエスト ヘッダーと URL をオブジェクトにカプセル化し、次に urllib ライブラリの urlopen メソッドを使用してネットワーク リクエストを送信してページを取得し、最後に read メソッドと decode メソッドを使用してページを変換します。ページのコンテンツを utf-8 形式に変換する文字列。

parse_html 関数を作成して、HTML ドキュメントを解析し、必要な情報を抽出します。この関数では、 beautifulsoup4 ライブラリの find メソッドと find_all メソッドを使用して、HTML ページ内の要件を満たすタグと属性を検索します。具体的には、Douban 書籍の HTML 構造を観察することで、各書籍の table タグとそれに対応する書籍タイトル、リンク、情報、評価などの情報を見つけ出し、これらのデータを抽出するコードを記述しました。その中で、strip メソッドと split メソッドを使用して文字列を処理し、余分な空白文字を削除し、文字列を分割しました。

最後に、抽出した書籍情報をローカル ファイルに保存するための save_data 関数を作成しました。この関数では、Python の組み込み関数 open を使用してテキスト ファイルを開き、ファイルの内容を書き込みモードで書き込み、format メソッドを使用して各書籍の関連情報を文字列にフォーマットしてファイルに書き込みます。ファイルの内容が文字化けしないように、ファイル名の後に encoding='utf-8' を追加する必要があることに注意してください。

メイン プログラムでは、for ループを使用して Douban Books の最初の 250 冊をクロールします。これを行うには、1 ページあたり 25 冊の本をクロールし、合計 10 ページをクロールする必要があります。各ループでは、現在のページ番号に基づいて必要な URL を計算し、get_html 関数を呼び出して HTML ページを取得します。次に、ページを parse_html 関数に渡し、ページを解析して必要な情報を抽出します。最後に、save_data 関数を呼び出して、すべての書籍情報をローカル ファイルに保存します。

  1. コードの実行

コードの記述が完了したら、コマンド ライン (Windows システム) またはターミナル (MacOS またはLinux システム)、コマンド python3 クローラー スクリプト名.py を実行して、Python Web クローラーを実行します。プログラムの実行中に、プログラムの出力情報を観察して、プログラムが正しく実行されたかどうかを判断できます。プログラムの実行後、ローカル ファイル douban_top250.txt をチェックして、データが正常に保存されたかどうかを確認できます。

概要

この記事の導入部を通じて、Python Web クローラーの実装方法とテクノロジについて予備的に理解しました。具体的には、Python の urllib および beautifulsoup4 ライブラリを使用して、Douban Books Web サイトの HTML 構造に基づいて Douban Books の情報をクロールする Python プログラムを作成し、データの収集と保存を実装することに成功しました。さらに、実際のアプリケーションでは、IP アドレスがブロックされるのを避けるために同じ Web サイトにリクエストをあまり頻繁に送信しないなど、Web クローラーに対するいくつかの注意事項を理解する必要があります。

以上がPythonでのクローラーの実践:Doubanブッククローラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート