この記事への対照的に、我々は詳細にPython2における説明とurllibは、ライブラリと使用中のpython3差、バーの下に学ぶために従うことを必要としている友人を説明します。
この記事では、Pythonでライブラリの異なるバージョンでurllibは変更点について説明し、関連するPython3.Xの利用urllibはライブラリを説明します。
urllibは、ライブラリ制御発行
urllibはライブラリには、URLを操作するためにサードパーティのライブラリのPythonのクロールページ、同じライブラリだけでなく、要求、httplib2が使用されています。
Python2.X、しかしPython3.Xサブurllibはとurllib2の内で統一urllibはにマージされます。変化に応じて、共通のテーブルで見ることができるの変更は、すぐにPythonプログラムの対応バージョンを記述します。
比較的、Python2.Xよりも中国の友好のためにPython3.Xサポートを言えば、そうPython3.Xにより一般的な使用urllibは、ライブラリのいくつかを紹介する次回のブログ。
送信要求
import urllib.request
r = urllib.request.urlopen(<a href="http://www.python.org/" rel="external nofollow">http://www.python.org/</a>)
urlopen()を使用しUrllib.request第インポートモジュールは、URLパラメータに要求を送信http.client.HTTPResponseオブジェクトを返します。
urlopenで()、タイムアウトフィールド、適切な回数は、応答を待って停止するように設定することができました。加えて、また、対応する現在の環境情報、ステータスコード、現在のページのURLを取得するためにr.info()、r.getcode()、r.geturl()を使用することができます。
応答の内容を読みます
import urllib.request
url = "http://www.python.org/"
with urllib.request.urlopen(url) as r:
r.read()
使用r.read()が応答してメモリの内容を読み取るために、デコードに対応する返された文字列を復号化する(対応ブラウザ「ビュー・ソースは、」関数を参照するを使用して)コンテンツページのソースコード() 。
URLパラメータが渡されました
import urllib.request
import urllib.parse
params = urllib.parse.urlencode({'q': 'urllib', 'check_keywords': 'yes', 'area': 'default'})
url = "https://docs.python.org/3/search.html?{}".format(params)
r = urllib.request.urlopen(url)
でurlencodeすることにより、文字列辞書URLのクエリ文字列を送信する()符号化データ、
文字列としてエンコードのparams、辞書内の各キーと値のペア「&」接続:「Q = urllibは&check_keywords =&yesの面積=デフォルトの」
建物の後にURLます。https://docs.python.org/3/search.html Q = urllibは&check_keywords = YES&エリア=デフォルト?
)もちろん、urlopen()構築直接サポートURL、要求は単に(取得できない場合があります手動でurlencodeによる直接リクエストを構築し、符号化されています。上述の方法は、コードモジュラー、よりエレガントになります。
パラメータは、中国に合格しました
import urllib.request
searchword = urllib.request.quote(input("请输入要查询的关键字:"))
url = "https://cn.bing.com/images/async?q={}&first=0&mmasync=1".format(searchword)
r = urllib.request.urlopen(url)
URLは、インタフェース、クエリキーワードのq写真をBingの写真を使用することです。直接中国の要求に着信URL場合は、コーディングエラーにつながります。私たちは、引用符()を使用する必要があり、URLエンコード中国人のキーワードは、あなたがデコードに対応するにunquote()を使用することができます。
カスタムリクエストヘッダ
import urllib.request
url = 'https://docs.python.org/3/library/urllib.request.html'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Referer': 'https://docs.python.org/3/library/urllib.html'
}
req = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(req)
いくつかのページをクロールするとき時々、アクセスを禁止する403エラー(禁止)、があるでしょう。サイトサーバーヘッダープロパティ認証の訪問者ので、これは、たとえば、次のとおりです。ユーザーエージェントXは、Pythonのメジャーバージョン番号、Y副である、として要求urllibはライブラリ、「Pythonの-urllibは/ XY」にデフォルトを送信することにより、バージョン番号。そこで、我々は、ヘッダプロパティ、アナログブラウザの辞書を渡して、urllib.request.Request()によるRequestオブジェクトを構築する必要があります。
ヘッダ適切な情報、開発者は、パケットキャプチャ解析ソフトウェアフィドラー、Wiresharkのを取得または使用するために、適切なページを表示する「機能タブをチェック」、ブラウザを介して「ネットワーク」ツールをデバッグすることができます。
上記の方法に加えて、(使用urllib.request.build_openerであることができる)またはreq.add_header()カスタムリクエストヘッダ、公式のサンプルを参照してください。
Python2.X、モジュール、およびurllibはurllib2のモジュールurllib.urlencode()は、URLパラメータを符号化することができる、とはurllib2.Request()Requestオブジェクトを構築することができる、カスタマイズリクエストヘッダ、その後統一urllib2.urlopenを(使用しているため、一般的に併用で)リクエストを送信します。
POSTリクエストが送信され、
import urllib.request
import urllib.parse
url = 'https://passport.cnblogs.com/user/signin?'
post = {
'username': 'xxx',
'password': 'xxxx'
}
postdata = urllib.parse.urlencode(post).encode('utf-8')
req = urllib.request.Request(url, postdata)
r = urllib.request.urlopen(req)
私たちは、登録、ログインおよび他の操作を行って、POSTフォームから情報を送信します。
この例では、文字列を返し、処理をコードするでurlencode()を実行を使用して、POSTフォームデータを構築し、ページ構造を分析する必要があり、その後、「UTF-8」フォーマットをエンコーディングを指定POSTDATAがバイトまたはファイルオブジェクトので、これが唯一です。最後POSTDATA urlopen()リクエストを送信を使用して要求()オブジェクトによって送信されます。
ローカル、リモート・データをダウンロード
import urllib.request
url = "https://www.python.org/static/img/python-logo.png"
urllib.request.urlretrieve(url, "python-logo.png")
クロール写真、ビデオ、および他の遠隔データ、使用urlretrieveは()ローカルにダウンロード。
最初のパラメータがURLにダウンロードされ、2番目のパラメータは、ダウンロードした後、保存されたパスです。
現在のディレクトリに公式サイトのロゴパイソンサンプルをダウンロードしてタプル(ファイル名、ヘッダ)を返します。
プロキシIPを設定します
import urllib.request
url = "https://www.cnblogs.com/"
proxy_ip = "180.106.16.132:8118"
proxy = urllib.request.ProxyHandler({'http': proxy_ip})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
r = urllib.request.urlopen(url)
時には、ウェブページをクロール頻度の高いサイトは、IPサーバをブロックされます。この場合には、プロキシIPは、上記の方法によって提供することができます。
まず、プロキシIPをパラメータとして辞書にIP、ビルドにproxyHandler()オブジェクト、「HTTP」およびプロキシIPを使用することができます見つけるためのオンラインサイトでは、プロキシサーバ情報を設定します。そして、オープナーオブジェクト、プロキシとHTTPHandlerの入ってくるクラスを構築します。urlopen()によって送信要求が、予め設定された対応する要求メッセージを送信するために使用されるグローバルに提供installl_opener()オープナー、によって。
例外処理
import urllib.request
import urllib.error
url = "http://www.balabalabala.org"
try:
r = urllib.request.urlopen(url)
except urllib.error.URLError as e:
if hasattr(e, 'code'):
print(e.code)
if hasattr(e, 'reason'):
print(e.reason)
あなたは、いくつかのURL関連の異常に対処するために、URLErrorクラスを使用することができます。導入urllib.error後、捕捉UrlError例外は、異常(UrlErrorサブクラス)HTTPErrorを発生した場合にのみので、異常状態コードe.codeを有するであろう、異常プロパティコードがあるかどうかを決定する必要があります。
クッキーの使用
import urllib.request
import http.cookiejar
url = "http://www.balabalabala.org/"
cjar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
urllib.request.install_opener(opener)
r = urllib.request.urlopen(url)
ステートレスWebページにアクセスする際に、クッキーセッションプロトコルはHTTPの間の状態を維持します。例:最初の時間は、POSTフォームを提出することによって、ログインすることができますのためにいくつかのサイトは、運転してログインする必要があり、そのサイトの下で他のサイトをクロールするとき、あなたはすべてのフォームを提出することによってたびにログインしなくても、ログイン滞在にクッキーを使用することができます。
まず、構築物をCookieJar()cjar、リユースHTTPCookieProcessor()cjarを処理するプロセッサ、およびオブジェクト - グローバルに配置オープナーオブジェクト()、によって構成さbuild_openerを、urlopen()によっては、要求を送信します
私たちは、Pythonの学習サイトをお勧めします、入力する]をクリックし、プログラムを学ぶことがいかに古い見て!基本的なPythonスクリプト、爬虫類、ジャンゴ、データマイニング、技術をプログラミング、仕事の経験だけでなく、小型のpythonパートナーのシニア入念な研究から戦闘にゼロベースの情報のプロジェクトを仕上げ!時限プログラマPythonは日常の技術を説明している方法は、学習と細部への注意を払う必要性へのいくつかを共有します