ホームページ >バックエンド開発 >Python チュートリアル >Python を使用してネットワーク リソースをリクエストする方法
私たちは長い間 Linux システムに関する知識を共有しているため、友人の中には Linux の操作に関することだけを共有していると誤解している人もいるかもしれませんが、実際にはそうではありません。私たちは日々の生活の中で開発を行っていますが、その過程で遭遇する問題点のいくつかは、要約できると思います。
最近、ネットワーク リソースに定期的にアクセスするためのプログラムを作成しています。これには、Python を使用してネットワークにアクセスする必要があるため、今日はこの点について簡単にまとめます。
ネットワーク上のリソースにアクセスするには、友人の中には urllib.request を使用する場合があります。このモジュールは Python 標準ライブラリでもあります。ただし、urllib.request のラッパーであり、より使いやすい request を使用します。初めて使用する場合は、リクエストをインストールする必要があります。インストールには pip を使用します:
pip install --user requests
インストールが成功したら、直接使用できます。使用する場合は、 Python ファイル:
import requestsimport requests
デモンストレーションの便宜上、リクエスト モジュールを使用して、github で最高の星評価を持つ Python プロジェクトにアクセスします。アドレスは:
https ://www.php.cn/link/62d90d223cf3e2239113a4963b191d71
全体を理解するには、まずブラウザを使用してこのアドレスを開いて、内部のコンテンツを確認します。 json形式で表示されるテキストです。
次に、新しい test-resp.py ファイルを作成し、次のコードを入力します。
import requests url='https://www.php.cn/link/62d90d223cf3e2239113a4963b191d71'; get_resp=requests.get(url);
上記のコードの最初の行では、リクエストが導入されています。モジュールの2行目でurl変数にアクセス先のアドレスを格納し、3行目でrequestsモジュールのgetメソッドを使用してURLにアクセスし、その応答を変数get_respに格納しています。応答は、要求されたリソースのコンテンツとステータスを含むオブジェクトです。 status_code オブジェクト、次のコードを使用して、応答のステータスを出力できます。
print(get_resp.status_code)
結果は次のとおりです。
$ python test-resp.py 200
もちろん、テキストを出力することもできます。応答、つまり print get_resp.text ですが、次の図に示すように、テキストは書式設定されておらず、読みにくくなっています。
上の図では、結果の一部のみをインターセプトしました。長すぎます... この結果は解析するのがさらに面倒ですが、中身を見るだけで json 形式であることがわかりますので、応答結果も json になります, そして Python の json 解析関数は非常に強力です。この json のキー値を次のように出力できます:
print(get_resp.json().keys())
結果は次のとおりです:
$ python test-resp.py dict_keys(['total_count', 'incomplete_results', 'items'])
上記の結果では、この応答結果を完全に json オブジェクトとして扱うことができます。たとえば、上記の結果の最初の keyi 値 total_count は、Python ウェアハウスの総数を表します。この値は次のように出力できます:
response_dict=get_resp.json(); print("Total repositories:", response_dict['total_count'])
実行結果は次のとおりです:
$ python test-resp.py Total repositories: 9128125
If読み取られるネットワーク リソースは通常の HTML 形式であるため、HTML 解析を完全に解決できるサードパーティ ライブラリ BeautifulSoup を使用できます。以前の記事でも BeautifulSoup について紹介しましたので、以下を参照してください: Python の Beautiful Soup ライブラリを使用して Web ページを分析する
一部のネットワーク リソースはリクエストに応答する可能性があります制限があります。ロボット (プログラム) がアクセスできないようにする、またはアクセスするために (ユーザー セッションを使用した) ログインを要求するなど、この目的のために、リクエストにリクエスト ヘッダーを追加したり、リクエスト ヘッダーでブラウザをシミュレートしたり、ユーザー セッション情報 (トークン) を追加したりすることができます。 )など。以下に示すように:
headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36', 'Authorization':'41d15146-c3f3-4c0b-b48b-b5210151a9df' } get_resp=requests.get(url,headers=headers,params=None)
上記のコードでは、ヘッダー オブジェクトの User-Agent がシミュレートされたブラウザー情報であり、Authorization がリクエスト トークンです。以下に示すように、必要に応じて他のリクエスト ヘッダー情報を追加することもできます:
header={ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' }
上記で使用した例はすべて get リクエストを処理しています。同じことは、リクエストを使用して post リクエストにも当てはまります。 post メソッドは次のとおりです。
post_resp=requests.post(url,headers=headers,data=None,json=None)
使用方法は get リクエストとまったく同じです。
上記が今回共有するすべての内容です。議論を歓迎します。
以上がPython を使用してネットワーク リソースをリクエストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。