Pythonの爬虫類注:単一のページをクロール

序文

Pythonはまた、クローラ技術である事を学ぶことはない、すべてのサイトが爬虫類に優しい上にあるため、より多くの状況は爬虫類を制限するサイトはユーザーエクスペリエンスの前提の下で、サイトへのアクセスへの影響を最小限に抑えるために作られていたが、たくさんの練習が必要です一定の制限は、最も一般的には、検証コード番号とウェブサイトのドメイン登録ログインページが表示されています。
画像
12306認証コードは、その初期の複雑さのために批判長時間を被ったインタラクティブなユーザーエクスペリエンスに影響を与えているが、なぜ12306に選択して、ユーザーエクスペリエンスのコードをあきらめませんか?

コードは、しきい値、ない人、それは主に目指しているが、悪質なコンピュータプログラムが含まれていてもよいようなものですので。

12306表面は最強の技術開発と保守のマスターと呼ばれ、それが実行するサーバー上の圧力はほぼ毎日、運転ピーク時の圧力もはるかに多くの二から一一10倍二から一一に相当します。

これは何のコードが存在しない場合にはある程度の安定性の重要性は、ユーザーエクスペリエンスよりも大きい場合、サービスサイトを提供するだけで必要で、プログラムは簡単にログイン、登録およびその他の操作を実行することができます。

資料に記載の自動ソフトウェアのグラブ投票したいと私は、リフレッシュアクセスの周波数が高いほど、12306サーバー上の圧力になります。検証コード:12306画面が最後に座っている人ではありません前に、我々は唯一の最もシンプルで、粗CAPTCHA方法を取ることができます解決することはできません。

離れて引っ張るが、抗爬虫類の一つは、これが私たちのフォローアップの出会いであることを意味します。

:それは爬虫類であるので、当然のことながら、最初の標的部位を確認する必要があり、ここで私は非常に良い練習のウェブサイトを考える爬虫類推奨金色の空を
画像

簡単から難しい課題へのウェブサイトのリスト8抗爬虫類、今日の話は基本的な1のいずれかです。単一のページをクロールし、データとデータを算出し、
画像

ページ要素の分析

私たちは、HTMLファイル内のデータを記録する必要があることに注意してください、私たちはデータ操作を選択する必要があり、開発者ツールを起動F12キーを押して、特徴
画像
、それが呼ばれるCOL-MD-1 div要素の数字で、この機能は私たちの後であることデータ抽出は、基礎を提供します。
いくつかのパートナーは、ここにHTML構文機能のいくつかをhtmlコードの小さな、簡単なの言及を理解できないことがあります。

  • タグは、通常ペアで来て、お互いを閉じるために使用されている(と私たちはPythonの同様の要素は、開始と終了の位置をクリアする必要があり、以前のコードブロックで話します)
  • タグは、一般的に、(この場合はクラスは、方法でもIDに似た名前を定義しているという名前の対象として50部構成の試験の論文として機能し、だけあなたが論文を検討していること、あなたの名前を書くことができます、だけでなく、対象の特定のデータへ)
  • HTMLコードの異なるラベルは、キーワードの異なる定義を持っています画像
  • JavaScriptがコードに埋め込むことができるHTMLやCSS、それらはまた、外部から導入することができる画像-lineが現在のHTMLファイルに直接書き込まれ
  • HTML、CSS、JavaScriptのデフォルト(HTMLで記述された機密情報は、仕事をしない)のコードは、直接見ることができるので、敏感な操作は、外部のjsファイルに書き込みません。
  • htmlの分ヘッド、ボディ
  • 異なるラベルは、異なる特性を有することができます

コンテンツはまだHTMLの方向記述の根拠はありません慎重に基本的な問題についての記事のこのシリーズを見てする必要があります。

プログラムの実現

所有者の意向を尊重するために、だけでなく、私たちはより良い練習を始めることができますようにするために異なる塩基を持つシリーズは、glidedskyに関連する記事は、すべてのコードを与えることはありませんが、技術と明確に関連するコードの一部についての話にしようとします。

Pythonはページのテキストを取得します

最も一般的に使用されるWebアクセスポイントGET / POST / DELETE / PUT / OPTIONいくつかの種類が、GETとPOSTリクエストです。

我々はより多くのまたは要求を取得遭遇したプロセスの爬虫類を書くように、すべてのパラメータやデータの特性は、URLリンクに表示される要求を取得し、取得データに使用され、それは、データ自体の操作を実行しません。

POST要求は、主にサーバーへの着信データに使用され、ブラウザのページのPOSTリクエストが表示されていないので、Webページキャプチャツールを必要とします。

F12 Chromeブラウザの開発ツールは、POSTリクエストを表示することができ、その内容
画像
burpsuiteキャプチャを使用してもPOSTデータパケットを取得することができます
画像

通常、要求パケットヘッダ要求と要求体で構成され、この要求パケットに、データ以外のデータがPOSTリクエストヘッダが形成されます。これは主に、データとサーバの対話、検証データソースとログイン資格情報の内部で使用されています。

最初は、POSTのために標識された青色のフレームパケットタイプ、要求を処理するためのパラメータのファイル名です。
そして、黄色のボックスの下にいくつかの属性は、ユーザエージェントの情報アクセス装置と、ブラウザの代わりにすべての基本的な情報の最初の、爬虫類を書くときに使用する必要がありました。

クッキー、この属性情報の保存が証明書に相当することができ、あなたはこのサイト上のクッキー誰でもパスワードを知らなくても、あなたのアカウントにログインして入力でき得ます。

PythonでアクセスWebページを達成するための多くの方法がありますが、私はこのライブラリは、使用requrestsに好みます。

getメソッド要求を使用して要求を完了して取得
画像
注:このエラーを報告した場合:
画像
それは、コマンドラインの使用、コンピュータがリクエスト・ライブラリをインストールしていないことを意味しpip install requests、コマンドをインストールすることができます。

あなたは、プログラムが正常にページのソースコードを返しますが、よく見るが、ソースコードを取得するにはPythonを使用して、我々は必要なデータが含まれていないことがわかります見ることができます。

これは、サイトが制限されているので、我々は要求クッキーの缶に入れて持っているので、あなたはあなたの中にログインした後にのみ、データを見ることができます。
画像
F12を押して、ページの主な要求を見つけ、ネットワークのネットワークオプションをクリックして、クッキーの内容がすべてダウンをコピーします。

get()メソッドは、私たちは、ヘッダパラメータを渡すことができます要求

画像

首尾よく目的のデータを取得

取得したテキストデータの処理

次に、管理アイデアの下で最初:
目的:すべての数字と合計を抽出するために
完全な今:テキスト全体を取得する
事はやって次へ:

  1. すべての値は、抽出されました
  2. これらの累積値

BeautifulSoup再:本当にそう平野である、あなたは正確に値に、このような長いテキストから取得したい、我々は2つのライブラリを使用する必要があります

BeautifulSoupは、コマンドラインを使用し、外部のライブラリですpip install BeautifulSoup4インストールのために。

メソッドの紹介:

from bs4 import BeautifulSoup

再正規表現のサポートライブラリで、Pythonは来るが、また、輸入の使用を導入する必要があります

美しいスープは、HTMLやXMLファイルからデータを抽出することができますPythonライブラリである。これは、検索方法に文書を変更、お気に入りの従来のコンバータを介してドキュメントのナビゲーションを可能にします。

これは、あなたがより簡単にデータを抽出することができます公式の説明、人気のポイントです。

正規表現は、異なる文字の数は、データを表す定義する特定のパターンを有する特徴データと照合するために使用されます。

平均的な人は本当に体の正規表現の多くのチャンスを参照してください、確かに使用してきたが。

ウェブサイトの登録時にたとえば、あなたは電子メールと電話番号を記入することが求められます、プログラムはまず、あなたが正しい形式で電子メールや携帯電話の番号を入力した正規表現によって決定されます。
画像

同じ正規表現の構文は、より複雑な、しかし非常に効果的な、非常にお勧めの学習です。

:正規表現を学ぶためにこの記事を読ん推奨正規表現を取得する30分

あなたはこれらの2つのライブラリの役割を理解すれば、私たちはそれらを使用して開始することができます。

Webコンテンツ処理へのアクセスにBeautifulSoupを使用する最初の

soup = BeautifulSoup(html,'html.parser')

データ処理のすべてのクラス= DIV COL-MD-1の内容を抽出します

nums = soup.find_all('div',class_='col-md-1')

これは、我々のデータはなっている:
画像
私は、ここに詳細を丸で囲んだ。なお、処理されたデータは、リストに格納された後に、これを示しています。

そして、すべて削除数字のほかにもする必要があります

x = re.findall(r'\d\d\d',str(nums),re.DOTALL)

文字列に対して正規表現なので、私たちは単なる文字列データ型、正規表現にマッチする3桁の数字があるのfindAllメソッドの最初のパラメータを変換するstrの方法を取得する必要があり、re.DOTALL表現改行やその他の特殊記号を含め、すべての文字に一致します。

findAllモジュール再方法、およびモジュールBeautifulSoup find_all方法は全く異なるものです。

画像

Pythonはモジュールの再公式文書の各メソッドを使用すると、いくつかの簡単な正規表現の知識の詳細なリストに。

この時点で、我々はすべての値が出一致しています
画像

そして、あなたは、インデックスのリストをトラバースにforループを使用することができ、その和を蓄積されたデータは、コードのこの部分が与えられていません。

しようとする、3行のコードを解消することができます。

また、実際BeautifulSoupといずれかのモジュール再スクリーニングデータ、私は怠け者だったので、私は無用だ理由を完了することができます。

最後に、最終的な業績

画像

画像

おすすめ

転載: www.cnblogs.com/pr1s0n/p/12540088.html