システム学習の下でpythonネットワーク爬虫類ノート1


システム学習の下でpythonネットワーク爬虫類の知識
1、爬虫類の定義
Web Spiderは、インターネットをクモの巣として定義し、ネットクモはページのリンクアドレスを通じてページを探します.
具体的な手順:WebサイトのあるWebページ(通常はトップページ)から、Webページの内容を読み取り、Webページの他のリンクアドレスを見つけ、これらのリンクアドレスを通じて次のページを探します.これにより、すべてのWebページがキャプチャされるまでループします.
実は、ネット爬虫類は爬行プログラムで、ホームページを捕まえるプログラムです.私たちはどのようにして自分が望んでいるページを見つけて、ページの他の関連のない部分を取り除くことができますか?私たちはまず自分の欲しいページのURLを見つけなければなりません.
2、ウェブページを閲覧する過程
Webページをキャプチャするプロセスは、ブラウザがブラウズするクライアントとして、サーバ側に要求を送信し、サーバ側のファイルをローカルにキャプチャし、説明し、表示することです.
HTML言語はタグ言語であり、タグで内容をタグ付けし、解析し、区別する.ブラウザの機能は、取得したHTMLコードを解析し、元のコードを直接見たサイトページに変換することです.
3、URL
uniform resource locatorの略で、リソースロケータを統一します.
URLのフォーマットは3つの部分から構成されています.
a、第1の部分はプロトコル(またはサービス方式と呼ばれる)である.
b、第2の部分は、そのリソースが格納されているホストIPアドレス(ポート番号も含む場合がある)である.
c、第3の部分はホストリソースの具体的なアドレスであり、例えばディレクトリやファイル名などである.
第1部と第2部は「://」で区切られ、
2番目の部分と3番目の部分は「/」記号で区切られています.
第1部と第2部は不可欠であり、第3部は省略できる場合がある.
4、pythonのurllib 2モジュールは制定URLページの内容をつかむ
Webキャプチャとは,URLアドレスに指定されたネットワークリソースをネットワークストリームから読み出し,ローカルに保存することである.
urllib 2はpythonのモジュールで、関数urlopenを使用してWebソースコードを取得します.
eg、最も簡単なアプリケーションコード:
import urllib2
response = urllib2.urlopen('https://gendertrender.wordpress.com/')
content = response.read()
print(content)

urllib 2は、設定されたHTTPリクエストを1つのRequestオブジェクトでマッピングし、このアドレスでRequestオブジェクトを作成し、urlopenを呼び出してRequestオブジェクトに送信することで、関連するリクエストrequestオブジェクトを返し、read()をRequestで呼び出すことができる.
import urllib2
res = urllib2.Reaquest('https://gendertrender.wordpress.com/')
response = urllib2.urlopen(req)
content = response.read()
print(content)

5、HTTP要求の操作
HTTPリクエスト時に、追加でできる2つのこと.
a、dataフォームデータの送信
ユーザー登録情報などのURLにデータを送信します.私たちはページをキャプチャする過程で、ログイン後にコンテンツを表示するサイトに触れることがあります.この時、アカウントデータをURLに送信するために使用します.一般的なHTMLフォームでは、dataを標準形式に符号化する必要があります.次に、dataパラメータとしてRequestオブジェクトに渡されます.符号化作業はurllib 2ではなくurllibの関数を使用する.
import urllib
import urllib2
url = 'http://www.baidu.com/register.cgi'
values = {'user':'qester'
  'pwd':'******'}
data = urllib.urlencode(values)# values    encode
req = urllib2.Request(url,data)
response = urllib2.urlopen(req)
content = response.read()
print content

dataパラメータが転送されていない場合、urllib 2はGET方式の要求を使用する.
b、Headersとhttpリクエストの設定
一部のサイトでは、プログラムにアクセスされたり、異なるバージョンを異なるブラウザに送信したりするのが好きではありません.デフォルトのurllib 2は「python-urllib/x.y」としてアクセスされます.このアイデンティティサイトには異なる操作があります.この場合、ヘッダデータを含む辞書をオブジェクトに要求できます.自分を偽装する.
import urllib    
import urllib2    
  
url = 'http://www.baidu.com/register.cgi'  
  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'    
values = {'name' : 'qester',    
          'location' : 'SDU',    
          'language' : 'Python' }    
  
headers = { 'User-Agent' : user_agent } #        IE   
data = urllib.urlencode(values)    
req = urllib2.Request(url, data, headers)    
response = urllib2.urlopen(req)    
the_page = response.read()

6、異常の処理とHTTP状態コードの分類
urlopenがresponseを処理できない場合、urlErrorが生成される.HTTPErrorはurlErrorのサブクラスであり、通常は特定のHTTP URLsで生成される.
a、URLError
URLErrorは,ネットワーク接続がない場合やサーバが存在しない場合に発生する.例外には、エラー番号とエラー情報を含むtupleの「reason」プロパティがあります.
b、HTTPError
responseが「リダイレクト」である場合、クライアントが別のアドレスからドキュメントを取得する必要がある場合、urllib 2はあなたのために処理します.他に処理できないurlopenはHTTPErrorを生成します.典型的なエラーには、「404」(ページが見つからない)、「403」(リクエスト禁止)、「401」(検証リクエスト付き)が含まれます.HTTPステータスコードは、HTTPプロトコルが返す応答の状態を表す.例えば、クライアントはサーバに要求を送信し、要求されたリソースが正常に取得された場合、返されるステータスコードは200であり、応答が成功したことを示す.要求されたリソースが存在しない場合、通常は404エラーが返される.
一般的にこの2つの異常を処理する最も一般的な方法は以下の通りです.
from urllib2 import Request, urlopen, URLError, HTTPError  
req = Request('http://bbs.csdn.net/callmewhy')  
try:    
    response = urlopen(req)    
except URLError, e:    
    if hasattr(e, 'code'):    
        print 'The server couldn\'t fulfill the request.'    
        print 'Error code: ', e.code    
    elif hasattr(e, 'reason'):    
        print 'We failed to reach a server.'    
        print 'Reason: ', e.reason       
else:    
    print 'No exception was raised.'