ホームページ > バックエンド開発 > Python チュートリアル > Python3 がリクエスト モジュールを使用してページ コンテンツをクロールする方法の詳細な例

Python3 がリクエスト モジュールを使用してページ コンテンツをクロールする方法の詳細な例

黄舟
リリース: 2017-09-25 11:23:56
オリジナル
5124 人が閲覧しました

この記事では主に、request モジュールを使用して python3 を使用してページ コンテンツをクロールする実際の方法を紹介します。興味のある方は学習してください。1. 私の個人用デスクトップ システムに pip

をインストールします。システムはデフォルトでは pip をインストールしません。後で request モジュールをインストールするために pip が使用されることを考慮して、ここでの最初のステップは pip をインストールすることです。

$ sudo apt install python-pip
ログイン後にコピー

インストールが成功しました。PIP バージョンを確認します:

$ pip -V
ログイン後にコピー


2. リクエストモジュールをインストールします

ここでは、pip を通じてインストールしました:

$ pip install requests
ログイン後にコピー


インポートを実行するエラーがない場合は、インストールが成功したことを意味します。

インストールが成功したかどうかを確認してください

3. beautifulsoup4をインストールします

Beautiful Soupは、HTMLまたはXMLファイルからデータを抽出できるPythonライブラリです。これにより、慣例的なドキュメント ナビゲーション、お気に入りのコンバーターを使用してドキュメントを検索および変更する方法が可能になります。 Beautiful Soup を使用すると、数時間、あるいは数日間の作業を節約できます。

$ sudo apt-get install python3-bs4
ログイン後にコピー

注: ここでは python3 のインストール方法を使用しています。python2 を使用している場合は、次のコマンドを使用してインストールできます。

$ sudo pip install beautifulsoup4
ログイン後にコピー


4.リクエストモジュールの簡単な分析

1) リクエストを送信します

まず第一に、もちろん、リクエストモジュールをインポートする必要があります:

>>> import requests
ログイン後にコピー

次に、クロールされた対象の Web ページ。ここでは例として以下を取り上げます:

>>> r = requests.get('http://www.jb51.net/article/124421.htm')
ログイン後にコピー

ここでは、r という名前の応答オブジェクトが返されます。このオブジェクトから必要な情報はすべて取得できます。ここのgetはhttpのレスポンスメソッドなので、類推でput、delete、post、headに置き換えることもできます。

2) URL パラメータを渡す

URL のクエリ文字列として何らかのデータを渡したい場合があります。 URL を手動で構築する場合、データはキーと値のペアとして URL に配置され、その後に疑問符が続きます。たとえば、cnblogs.com/get?key=val のようになります。リクエストでは、params キーワード引数を使用して、これらのパラメータを文字列の辞書として提供できます。

たとえば、Google で「Python クローラー」というキーワードを検索する場合、newwindow (新しいウィンドウが開きます)、q および oq (検索キーワード) などのパラメーターを手動で URL に組み込むことができ、次のコードを使用できます。

>>> payload = {'newwindow': '1', 'q': 'python爬虫', 'oq': 'python爬虫'}

>>> r = requests.get("https://www.google.com/search", params=payload)
ログイン後にコピー

3) 応答コンテンツ

r.text または r.content を通じてページの応答コンテンツを取得します。

>>> import requests

>>> r = requests.get('https://github.com/timeline.json')

>>> r.text
ログイン後にコピー

リクエストはサーバーからのコンテンツを自動的にデコードします。ほとんどの Unicode 文字セットはシームレスにデコードできます。 r.text と r.content の違いについて少し追加します。簡単に言うと、

resp.content はバイナリデータであるバイト型を返します。テキストを取得したい場合は、r.text を使用します。写真やファイルを取得したい場合は、r.content を使用します。

4) Web ページのエンコーディングを取得します

>>> r = requests.get('http://www.cnblogs.com/')

>>> r.encoding

'utf-8'
ログイン後にコピー

5) 応答ステータス コードを取得します

応答ステータス コードを検出できます:


>>> r = requests.get('http://www.cnblogs.com/')

>>> r.status_code

200
ログイン後にコピー

5。最近 OA システムを導入しました。ここではその公式ドキュメント ページを例として、ページ内の記事タイトルやコンテンツなどの有用な情報のみをキャプチャします。

デモ環境


オペレーティングシステム: linuxmint

Python バージョン: python 3.5.2使用モジュール:requests、Beautifulsoup4

コードは次のとおりです:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
_author_ = 'GavinHsueh'

import requests
import bs4

#要抓取的目标页码地址
url = 'http://www.ranzhi.org/book/ranzhi/about-ranzhi-4.html'

#抓取页码内容,返回响应对象
response = requests.get(url)

#查看响应状态码
status_code = response.status_code

#使用BeautifulSoup解析代码,并锁定页码指定标签内容
content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
element = content.find_all(id='book')

print(status_code)
print(element)
ログイン後にコピー
プログラムが実行され、クロール結果が返されます。

クロールは成功しました


クロール結果が文字化けする問題について

実は最初はシステムにデフォルトで付属しているpython2を直接使っていたのですが、この問題でかなり苦労しました返されたコンテンツのエンコードが文字化けしていたので、何度もグーグルで検索しましたが、これらの解決策はどれも機能しませんでした。 python2で「おかしくなった」ので、正直python3を使うしかありませんでした。 Python2 のクロールされたページのコンテンツが文字化けする問題については、私のような将来の世代が寄り道を避けるために、先輩方が経験を共有してくださることを歓迎します。

以上がPython3 がリクエスト モジュールを使用してページ コンテンツをクロールする方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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