1つの爬虫類紹介
爬虫類Framework 1.1の
パフォーマンス:
同時の方式:非同期IO(gevent /ツイスト/ asyncio / aiohttp)、カスタムモジュールの非同期IO、IO多重化:選択
scrapyフレームワーク
はじめに非同期IO:ツイスト、ツイストベースScrapyソース定義クローラフレーム、ツイストScrapyを使用しながら、
1.2トルネードフレーム(非ブロッキング非同期)
トルネード基本的な使い方
ソース解析
カスタム非同期フレームを非ブロック
2.基本操作爬虫類
2.1リクエストのテンプレートモジュール
BP4インポートBeautifulSoupから
R = requests.get(URL)
スープ= BeautifulSoup(response.text、機能= "html.parser")
ターゲット= soup.find(ID = "XXX")
印刷(ターゲット)
*爬虫類の枠組み文書のコースウェア・ワード「の情報にアクセスできるウェブクローラ。」
2.2リクエストの詳細
2.2.1アンチファイアウォール
ヘッダのUser-Agentの手動変更、など
'SER-エージェント': "Mozillaの/ 5.0"
2.2.2追加の操作
- requests.post( 'URL')/( 'URL')を取得、次のパラメータをロードすることができます
URLアドレスを提出
本体データと共通辞書に辞書、種類、文字列、キーに要求することができるとJSONを行うことができ、リクエストボディ、11変速機、のデータで送信されたデータ
リクエストボディにJSON転送データは、全ての文字列、統一された変速機の内部に直列に接続され、ネストされた辞書の辞書は、データのみを送信することができるJSON
URLで渡されたパラメータparamsは、メソッドパラメータの指定された数は、可変パラメータの方法を変更します
ユーザーの身元を特定するためのクッキー、sessioトラック
ヘッダは、ヘッダを要求し、ファイアウォールのサイトをクロールするためのパラメータを変更します
ファイル操作用のファイル
追加暗号化されたユーザー名とパスワードの認証ヘッダ
タイムアウト要求とそれに対応するタイムアウト
allow_redirectsリダイレクトを許可するかどうか、すなわち、非単一の宛先爬虫類
エージェントのプロキシ
証明書システムを無視するかどうかを確認します
証明書の証明書ファイル
クライアントアクセス情報履歴を保存するrequests.Session()
- 応答= requests.post()戻り値
response.get( 'URL')
response.text出力テキスト
response.contentの出力内容(任意のテキスト)
response.encodingコーディング
response.aparent_encodingゴミ問題を解決します
- リクエストヘッド/テールリクエスト
参照してください、データを保存します
- インタラクティブなデータの提出
1.直接HTML- - ネットワークレビューに、メッセージの形で送信、データはこのように更新されません。
2.あなたはこの方法を更新中およびデータのアップロード後にHTML-レビュー - ネットワークでは、フォームのフォームを形成するためにデータを提出する場合。
提供2.3 BeautifulSoup機能
コードについては、次の理解のために、単一の行のコメントに書かれています。
BS4の輸入BeautifulSoup #自定义HTML html_doc = ""」 <HTML> <HEAD> <TITLE>ヤマネの物語</ TITLE> </ HEAD> <BODY> の<div> <のhref = 'のhttp:// WWW。 cunzhang.com '>剥夺老师<P>空自</ P> </a>の</ div> <a id='i1'>刘志超</a>の の<div> <P>空自</ P> </ divの> <P> asdfffffffffff </ P> </ BODY> </ HTML> ""」 スープ = BeautifulSoup(html_doc、機能は= " html.parser ") タグ = soup.find(' A ' ) V = tag.unwrap() 印刷(スープ) から bs4.element インポートタグ OBJ1は、タグ(名前= = ' DIV '、attrsに= { ' ID ':' IT ' }) obj1.string = ' 私はへの新たなんだ' タグ(= soup.findを" A ' ) V = tag.wrap(OBJ1) #現在の行からは、挿入されたHTML プリント(スープ) タグ = soup.find(' ボディ')#身体から挿入の<div>の後に部分的にHTML、出力<BODY> <div> <div>の間でのコンテンツ tag.append(スープ。(見つけます"' )) プリント(スープ) から bs4.elementのインポートタグ OBJ =タグ(NAME = ' I 'ATTRSは= { ' ID ':' それ' }) obj.string = ' 我是一个新来的' タグ = soup.find(' 身体' ) #1 tag.insert_before(OBJ) tag.insert_after(OBJ) プリント(スープ) タグ = soup.find(' P '、再帰= 真) プリント(タグ) タグ = soup.find(' 身体').find(' P '、再帰この= False)が 印刷(タグ) タグ = soup.find(' A ' ) V = tag.get_text() 印刷(V) #は、操作属性 タグをsoup.find =(' A ' ) tag.attrs [ ' 恋人' ] = ' 物理の先生' デル tag.attrs [ ' HREF ' ] 印刷(スープ) #の子供:息子 #タグとコンテンツ から bs4.elementのインポートタグ タグ = soup.find(「身体」).children ためのタグでタグ: IFタイプ(タグ)== :タグ 印刷(タグ、タイプ(タグ)) 他: 印刷(" テキスト.... ' ) タグ = soup.find(' ボディ' ).descendants プリント)(一覧(タグ) タグ = soup.find(' 身体" ) #オブジェクトのタイプはバイトに変換し 、印刷を(tag.encode_contents()) #バイナリに中国語の文字符号化は、<BODY> XXX <body>タグ出力使い捨てボディコンテンツ #は文字列型にオブジェクトを変換する プリント(tag.decode_contents()) #の復号、バイナリ変換漢字、<身体> XXX <body>タグのボディコンテンツ出力分岐 #の印刷(STR(タグ))