爬虫類の原則
ネットワークはクモをクロールされているように、我々は理解することができるウェブクローラこと爬虫類、彼は大規模なネットワークにインターネットをなぞらえ、それはリソースが発生した場合、この爬虫類で、それはその後、少しクモの巣をクロールしていますそれがダウンしてクロールされます。何をクロールしたいですか?これは少しあなた、それによって制御されます。
例えば、それはネットで、彼は実際には、Webページへのハイパーリンクは、それがデータを取得するために別のオンラインに登ることができ、方法を見つけ、ページをクロール。このように、本の大きな網でも、全体のクモが手の届くところにある、毎分がダウンして登ることはものではありません。
1.インターネットとは何ですか?
これは呼ばれるインターネットと一緒にインターネットにコンピュータ・ステーションに、ネットワークデバイスのスタックを指します。
2.インターネットの設立の目的は?
目的は、インターネットや共有データ転送データを確立することです。
3.データとは何ですか?
..........
4.インターネットプロセス
1.通常のユーザデータ取得モード:
オープンブラウザ - >標的部位に要求を送信する - >応答データをフェッチ - ブラウザへ>レンダラ
2.クローラ:
アナログブラウザ - >標的部位に要求を送信する - >応答データをフェッチ - >貴重なデータを抽出 - >データに永続化
5.ウェブを閲覧するプロセス
httpプロトコルを要求します。HTTPS = HTTP + SSL
ユーザーはプロセスでウェブを閲覧、我々はそのようなhttp://image.baidu.com/などの素敵な写真の多くを見るかもしれないが、我々はいくつかの写真とBaiduの検索ボックスが表示されます、このプロセスは、ユーザーがURLを入力し、実際にあります後に、ホストサーバを見つけるために、DNSサーバの後に、サーバに要求を送信し、解決後のサーバーは、ユーザーのブラウザHTML、JS、CSSおよび他の文書に送信され、ブラウザは、ユーザーが画像のすべての種類を見ることができるようになり、解析します。
そのため、ユーザーのページを見ることができますが、基本的に爬虫類に登ることを達成するためのHTMLコードを解析し、フィルタリングすることによって、コンテンツ、写真へのアクセス、テキストおよびその他のリソースで、HTMLコードで構成されています。
6.爬虫類の全体のプロセス
- リクエストを送信する(:要求データベース要求、セレン要求ライブラリ、rullib要求はライブラリが必要)
- (サーバへの送信要求限り、要求が応答データによって返される)応答データをフェッチ
- パースと抽出データ(パースライブラリが必要です:再(定期)、BeautifulSoup4、のXpath)
- ローカルに保存する(ファイル処理、データベース、MongoDBの)
7.URLの意味
URLまたは私たちは場所とアクセス方法は簡単ですからURLユニフォームリソースロケータが、インターネット上で利用可能なリソースの一種であると言うことですユニフォームリソースロケータは、標準は、インターネット上のリソースのアドレスであると述べました。インターネット上の各ファイルには、情報がファイルの場所とブラウザがそれに対処する方法でなければならないことを示している含まれている固有のURLを持っています。
URLの形式は、3つの部分から構成されています。
- (そうでなければサービスモードとして知られている)プロトコル
- (時々ポート番号を含む)は、リソースのホストのIPアドレス
- などのディレクトリやファイル名などのホストリソースの特定のアドレス、
爬虫類がデータをクロールするとき、彼らが得ることができる前に、あなたはそれゆえ、それはデータへのクローラのアクセス、大きな助けを学ぶ爬虫類のためのその意味を正確に理解するための基本的な基礎である、ターゲットURLを持っている必要があります。
2つの要求のライブラリリクエスト
1.リクエストは何ですか
リクエストはApache2のライセンスのオープンソースHTTPプロトコルライブラリを使用して、urllibはに基づいて、Pythonで書かれています。それは私たちが完全にHTTPテストのニーズを満たすために多くの作業を保存することができ、urllibはより便利です。
2.リクエストを送ります
1)様々な方法を求めます
①GET:ページ情報要求で指定され、エンティティ本体が直接データを取得する要求を送信する返します。
②POST:リクエストサーバは、URIで識別される新しい従属エンティティとして指定された文書を受け取ります
③HEAD:ページの唯一のリクエストヘッダ。
④PUT:サーバーからクライアントに送信された文書データの具体的な内容を交換してください。
⑤DELETE:指定されたページを削除するようにサーバに要求します。
どのように使用するには:
インポート要求
requests.get( 'http://httpbin.org/post')
requests.post( 'http://httpbin.org/post')
requests.put( 'http://httpbin.org/put')
requests.delete( 'http://httpbin.org/delete')
requests.head( 'http://httpbin.org/get')
requests.options( 'http://httpbin.org/get')
2)プロパティメソッド
3)それぞれのステータスコード
1XX:暫定的な応答(暫定応答により表され、ステータスコードの動作を継続するリクエスタを必要とします)。
2XX:成功応答(ステータスコードは、要求の成功した処理を示しています)。
300番台:リダイレクション応答は(要求、一般的にさらに操作の必要性を満たすために言った、リダイレクトのためにこれらのステータスコード。)。
4XX:エラーを要求(これらのステータスコードは、処理サーバを防ぎ、リクエストが間違っている可能性があることを示します)。
5xxの:サーバーエラー(これらのステータスコードはありませんリクエストで、サーバー自体になる傾向があり、これらのエラーのための要求を処理しようとしているときに内部サーバーエラーが発生したを示しています。)。
一般的な応答コード:200 - サーバーはページを正常に返しました404 - サービスはご利用いただけません。 - 要求されたページには、503が存在しません。
4)方法を取得:requests.get(URL、のparams =なし、** kwargsから)
URL:GETのページへのリンクをシミュレートするために必要な
params:それらをコードせずに、URL、辞書やバイトストリーム形式の追加のパラメータは、一般的にGETリクエストを送信するために使用します
** kwargsから:12のアクセス制御パラメータ
データ:辞書情報指定されたフォームは、一般にPOSTを使用して要求を送信するために使用します
1 import requests 2 url = 'http://www.httpbin.org/post' 3 data = { 4 'users':'value1', 5 'key':'value2' 6 } 7 response = requests.post(url=url,data=data) 8 print(response.text)
headers:字典类型,指定请求头部
#は、ヘッダパラメータに辞書は、要求は、カスタムヘッダの特定の状況に基づいて変更されることはありませんすることができますパス #自分の行動。唯一の最後の要求で、ヘッダ情報のすべてがそこに渡されます。 インポート要求の ヘッダ = { ' User--エージェント':' のMozilla / 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36(ヤモリ様KHTML)クローム/ 61.0.3163.100サファリ/ 537.36 ' 、 } レスポンス = requests.get(「HTTPS ://www.zhihu.com/expiore "、ヘッダ= ヘッダ) を印刷(response.text)
プロキシは、プロキシを設定:辞書には、プロキシを指定します
#プロキシプロキシを設定するためのパラメータを設定し、プロキシが同じタイムパスワード認証に設けられていてもよい、また、SOCKSプロキシを使用することができる インポート要求を プロキシが = { 「HTTP 」:「http://127.0.0.1:9999 」を、(プロキシアドレス、ポート) 「HTTPS ":" http://127.0.0.1:8888 " } レスポンス = requests.get(" https://www.baidu.com "プロキシ= プロキシ) プリント(response.text) '' ' プロキシ= {" HTTP ":" HTTP://ユーザー:[email protected]:3128 /」} プロキシ= { 'http': 'socks5://user:pass@host:port', 'HTTPS':「SOCKS5の://ユーザー:ホスト@渡す:ポート」 } 「「」
クッキー:辞書、指定されたクッキーは、セッションを維持します
#获取Cookie,用cookies参数来发送到服务器 import requests response = requests.get("URL") print(response.cookies) #获取cookie #print(response.cookies['example_cookie_name']) 获取某个具体的cookie for key,value in response.cookies.items():#获取所有cookie的两个属性 print(key + '=' + value) cookies = {'cookies_are': 'working'} #设置cookie参数 = requests.get要求(「http://httpbin.org/cookies 」、クッキー= クッキー) #のセッションが残っている 「'」 クッキーが効果をシミュレートするために使用されている場合は、必ず、シミュレートされた着陸を作る、ログインし、維持するためにセッションを行うことができるということですブラウザページ。 あなたは、同じホストに複数の要求を送信する場合、TCP基礎となる接続が再利用されるようにクッキーを取得し、クッキーの内容は、大幅なパフォーマンス向上につながる、着陸地点であることを。 「」 ' インポート要求 S = requests.Session() #アナログ・サーバのログイン・プロセス、サーバに格納されたユーザのログイン情報を備えたセッションを()。 s.get(" http://httpbin.org/cookies/set/sessioncookie/123456 " ) レスポンス = s.get(" http://httpbin.org/cookies " ) 印刷(response.text) #セッションマネージャは、ブロック出口とのセッションは、あまりにも、例外が発生した場合でも、閉鎖されることを保証するために、テキストの前後に使用することができます。 :S AS()とrequests.Session s.get(' http://httpbin.org/cookies/set/sessioncookie/123456789 ')
認証設定認証:タプル型は、アカウントとパスワード着陸を指定します
インポート要求 のurl = ' http://www.httpbin.org/basic-auth/user/password ' AUTH =(' ユーザー'、' パスワード' ) 応答 = requests.get(URL = urlには、AUTH = AUTH) プリント( response.text)
証明書の検証は検証:ブールタイプ、サイトを指定して証明書検証要求の必要性を、デフォルトはTrueで、あなたが証明書を検証したくない、あなたはFalseに設定する必要があります
「」あなたがFalseに設定されていることを確認する場合は、リクエストは、SSL証明書の検証を無視することができますが、警告の原因となります「」「 (= Falseを確認し、」https://kennethreitz.org」)requests.getを 警告を無視し、第1位 入ってくる証明書を検証するために#2、 インポート要求を requests.packagesからはurllib3インポート urllib3.disable_warnings() レスポンス= requests.get( "https://www.12306.cn"、検証= False)が 印刷(response.status_codeを) > 200 >> #フォルダパスのフォルダを確認した場合requests.get(「https://github.com」、確認=「/パス/に/ certfileに」)が設定されているは、OpenSSLにより提供c_rehashツールで処理されなければなりません。 #S = requests.Session()またはセッションでそれを保持する 。#s.verify = '/パス/に / certfileに'
ファイル:ファイルのアップロード
インポート要求#のファイルアップロード操作の後の ファイル = { 「ファイル」:オープン(「favicon.icoを」、「RB 」)} #ファイルと(指定されアップロードされたファイル名)、オープンなアプローチは、それがファイルの読み出し 応答を= requests.post(' http://httpbin.org/post '、ファイル= ファイル) を印刷(response.text)
タイムアウトを設定するタイムアウト:応答が例外がスローされ、指定された時間をかけて得られない場合は、タイムアウトを指定します
「」「応答を待っているのタイムアウトパラメータに設定した秒数後に停止するように要求を伝える、サーバがタイムアウト秒以内に応答しない場合、例外が発生します。」「」 インポート要求が 要求 = requests.get(「HTTPを:/ /www.google.com.hk "、タイムアウト= 0.01 ) を印刷(request.url)
例外処理:Requests
継承スロー明示的な例外requests.exceptions.RequestExceptio
5)要求のヘッダ情報
ユーザエージェント:ユーザエージェント(要求は、コンピュータ機器やブラウザによって証明送信するために)
クッキー:実際のユーザーのログイン情報(ターゲット・サイトのユーザーであることを証明するために)
requests.Session()クッキー情報を保持します
リファラー:URLへの訪問では、(あなたがウェブ上の標的部位から飛び降りていることを証明するために)
6)リクエストボディ
POSTリクエストは、リクエストボディを持っています
フォームデータ{ 'ユーザ': 'ベルリン'、 'PWD': '123'}