今日の内容:
爬虫類原理
2つの要求のライブラリリクエスト
爬虫類の原則
1.インターネットとは何ですか?
これは呼ばれるインターネットと一緒にインターネットにコンピュータ・ステーションに、ネットワークデバイスのスタックを指します。
2.インターネットの設立の目的は?
目的は、インターネットの転送とデータ共有データを確立することです。
3.データとは何ですか?
たとえば...淘宝網、Jingdongは製品情報などの
証券投資情報東フォーチュンの数、雪だるまネットワーク...
家の連鎖は、そのような利用可能な情報のように自由に....
12306チケット情報...
4.インターネットの全体のプロセス:
-普通のユーザー:
オープンブラウザ- >標的部位にリクエストを送信する- >応答データをフェッチ-ブラウザで>レンダラ
-クローラ:
アナログブラウザ- >標的部位に要求を送信する- >応答データをフェッチ- - >データに永続化- >貴重なデータを抽出し
、ブラウザがリクエストを送信している何5.?
httpプロトコルを要求します。
-クライアント:
ブラウザがソフトウェアである- >クライアントIPおよびポート
-サーバー
https://www.jd.com/
www.jd.com(Jingdongはドメイン名) - > DNSの解析- > IPとJingdongは用のポートサービス側
クライアントのIPアドレスとポート------> IPおよびポートサーバーにリクエストを送信しますあなたは、対応するデータを取得するためのリンクを確立することができます。
6.クローラープロセス全体
-送信要求(要求はライブラリを必要とする:セレンライブラリを要求し、データベース要求を要求)
-応答データをフェッチ(限りサーバに送信要求として、要求が応答データを返す)
-構文解析及び抽出データ(ライブラリを解析する必要:BeautifulSoup4は、XPathが...)、再
-ローカル(ファイル処理、データベース、MongoDBのリポジトリに保存)
(以下では、単一のページを登る百度への要求の基本的な使用は)例えば、
#インポート要求がライブラリリクエスト要求をインポートする 応答オブジェクトを取得するには#Baiduのページの送信要求 応答= requests.get(URL =「HTTPS://www.baidu.com/」) 。#セットを8文字エンコーディングUTF response.encoding = 'は、UTF-8' 応答位印刷テキスト 印刷(response.text) #書かれたローカル応答テキスト を開くとF AS( 'baidu.html'、 'W'、エンコード= 'UTF-8'): f.write( response.text)
ライブラリ要求の2つの要求
1.インストールと使用
オープンCMD -
-入力:PIP3のインストールを要求し
たビデオクロール2.を
3.パケットキャプチャ解析
(チェック)オープン開発者モードブラウザは---->ネットワークを選択する
ページ訪問した接尾辞を見つけるために、 xxx.html(応答テキスト)
1)要求URL(ウェブサイトのアドレスへのアクセス)
2)要求メソッド:
GET:
データを取得するための要求を直送
https://www.cnblogs.com/kermitjam/articles/9692597.html
POST:
持参する必要がありますターゲットアドレスへのユーザ情報の送信要求
https://www.cnblogs.com/login
。:3)レスポンスステータスコード
2XX:成功
3XX:リダイレクト
4XX:リソースが見つかりません
の5xx:サーバーエラー
4)リクエスト・ヘッダー:
User-Agent:(コンピュータ機器やブラウザによって送信された要求であることが証明された)ユーザエージェント
のクッキー:実際のユーザーのログイン情報(ユーザーがターゲットサイトが証明する)
リファラー:最初の訪問のURL(あなたが標的部位からジャンプアップしていることを証明しますA)
5)リクエストボディ:
POSTリクエストは、リクエストボディを持つことになります。
データをForm1
{
「ユーザ」:「タンク」、
「PWD」:「123」
}
(シングル例の「梨映像」ビデオをクロールで)
「」「」「」 「「」 :ビデオオプションを 1.ビデオナシ 「」」 #インポート要求の #の 映像送信要求の送信元アドレスには##を #1 requests.getレスポンス=( #「https://video.pearvideo.com/ MP4 / adshort / 20190625 / 1570302-14057031_adpkg-ad_hd.mp4-CONT ') # などの画像、ビデオ、データなどの##のプリントバイナリストリーム、 #印刷(response.content) # ##ローカルに保存された映像 (オープンと#'ビデオ'F AS):.MP4 '' WB #のf.write(response.content) ' '' 最初のホームビデオ梨にリクエストを送信し、1を https://www.pearvideo.com/ ビデオのすべてがIDを取得解決: video_1570302 re.findall() :2は、動画の詳細ページのURLを取得するには 徒歩で行く、地下鉄のスリップに奪わスリルの男を! のhttps://www.pearvideo.com/video_1570302 シークレットカレーズ https://www.pearvideo.com/video_1570107 「」「 のインポートが要求し たテキストデータの解析のために、インポートのRe#の定期を ビデオホームピアーズに#1、第1の送信要求を 応答= requests.get(」https://で WWW .pearvideo.com / ') #プリント(response.text) 通常のビデオマッチングアクセサリーIDの再# :定期的なマッチングルール#パラメータ1 #2のパラメータ:解析テキスト #3パラメータ:パターンマッチング res_list = re.findall(' <A = HREF "(*。?)ビデオ_" 'response.text、re.S) #印刷(res_list) 各動画の詳細ページのURLをステッチ# res_listでv_idのために: detail_url =' https://www.pearvideo.com /動画_「+ v_id #印刷(detail_url) #ビデオソースURLの前にビデオのために、各ページのリクエストを送信する レスポンス= requests.get(URL = detail_url) (#印刷の対応を。テキスト) #パースと抽出詳細ページ動画のURL #動画のURL video_url = re.findall( 'srcUrl = "(。*?)"'、Response.text、re.S)[0] 印刷(video_url) #ビデオ名 VIDEO_NAME = re.findall( 「<H1クラス= (。*?) "ビデオ-TT" >>」、response.text、re.S)[0]の</ H1 プリント(VIDEO_NAME) バイナリのビデオストリームを取得するため#のURLビデオ送信要求 v_response = requests.get(video_url)を :F AS( '%s.mp4' %のVIDEO_NAME、 'WB')とのオープン f.write(v_response.content) 印刷(VIDEO_NAME、 'ビデオは完全にクロール')
IMDBのクロール三
Top250クレソン動画を評価するとき、我々は、非貪欲マッチングによって直接無視することができ、同じ条件のために、そのような情報へのアクセスなど、サイト上でより多くの情報をクロールしながら、
重要な情報については、(。*?)エキス異なる情報。ここではいくつかの関連するシンボルがあります。
:現在の位置から
*:すべての検索
?見てない最初の検索:
*:。?非欲張りマッチ
。*:グリード一致
(*。?):括弧の中にデータを抽出
映画ランキング、映画のURL、フィルム名を、ディレクター-主演-映画のスコアの種類、レビューの数、フィルムの概要
(コードのランキング、次のクロールされたクレソンTop250 :)
'' '' '' '' ' Https://movie.douban.com/top250?start=0&filter= https://movie.douban.com/top250?start=25&filter= https://movie.douban.com ?/ TOP250スタート= 50&フィルタ= 1の送信要求 2.データを解析し 、データを保存3. 「」 ' インポート要求 のインポートを再 #クローラの三部作の 要求を送信#1を get_page(BASE_URL)DEFを: レスポンス= requests.get(BASE_URL) レスポンスのリターン #2は、テキスト解析 :DEFのparse_index(テキスト) RES = re.findallを(「<DIV CLASS = "項目"> * <EMクラス= "">(*)</ EM> *。?。?。? <a href="(.*?)"> * <スパンクラス= "タイトル"> </ span>の* ディレクター。?(*。?): 。?(。*?)</ P> * <。? スパンクラス= "rating_num」。*?>(。*?)</ span>を。*?<スパン>(。*?)人评价</ span>を。*?<スパンクラス= "" INQ>(。*?)</スパン>」、テキスト、re.S) 印刷#(RES) RESを返す #3.保存したデータ :DEFのsave_data(Data)を F ASオープンで( 'douban.txt'、 'A'、エンコード= 'UTF-8'): F.書き込み(データ) #メイン+回车键 場合__name__ == '__main__': #10 NUM = #= BASE_URL " https://movie.douban.com/top250?start={}&filter='.format(num) NUM = 0 (10)でラインレンジ用: BASE_URL = f'https://movie.douban.com/top250 ?NUM} {スタート=&フィルタ= ' NUM = + 25 印刷(BASE_URL) リクエストを送信する#1、呼び出し元の関数 レスポンス= get_page(BASE_URL) #2.解析テキスト movie_list = parse_index(response.text) #3データのセーブ #データ形式 movie_listでの映画のために: #プリント(動画) #伸長割り当て -主演-映画のスコアの種類、レビューの数、フィルムの概要を#映画ランキング、映画のURL、フィルム名、ディレクター v_top 、v_url、v_name、v_daoyan、v_point 、v_num、v_desc =映画 #V_TOP =ムービー[0] [1]#1 v_url =ムービー moive_content = F '' ' ランキング作品:{v_top} フィルムURL:{v_url} ムービータイトル:{v_name} 監督出演:{v_daoyan} 映画評価:{v_point} 評価者の数:{} v_num 映画あらすじ:v_desc} { \ N- '' ' 印刷(moive_content) #は、データ保存 save_data(moive_contentを)