まず、基本的なエントリー
1.1爬虫類とは何ですか
クローラ(クモ、およびウェブクローラー)は、サイト/ネットワークを指していることは、リソースへのプログラムアクセスの後に有用なデータを分析して抽出し、要求を開始しました。
技術的な観点からは、ブラウザの挙動をシミュレートするプログラムによって要求されたサイトで、サイトはHTMLコード/ JSONデータを返す/バイナリデータ(画像、動画)は、ローカルに登り、その後、使用するまで保存するために、彼らは必要なデータを抽出します。
爬虫類の1.2基本的な流れ
ネットワークデータウェイへのユーザーアクセス:
オプション1:ブラウザが要求を提出する--->ダウンロードページコード--->ページに解決
実施例2:アナログブラウザはリクエストを送信する(ページコードを取得する) - >有益なデータを抽出 - >データベースやファイルに保存されています
爬虫類はやり方2です。
1
Pythonのチュートリアルを実践するために要求エントリを開始するグループを追加してください
それは要求を送信し、標的部位への要求を送信するHTTPライブラリを使用します
要求が含まれています:219539519などのゼロベースのリクエストヘッダ、リクエストボディを、高度の参加を歓迎します
要求モジュールの欠陥:JSのないCSSコードと実行
2
レスポンスの内容を取得します
サーバが適切に応答することができた場合は、応答を与えるために
レスポンスが含まれます:HTML、JSON、写真、動画など
3
構文解析内容
HTMLの解析データ:正規表現(REモジュール)、XPathの(主に)、美しいスープ、CSS
分析データをJSON:JSONモジュール
バイナリデータの解析:ファイルに書き込むWB方法
4
セーブデータ
データベース(MySQLの、Mongdb、Redisの)またはファイルの形式。
1.3httpプロトコル要求と応答
httpプロトコル
要求:サーバー(ソケットサーバ)に、ブラウザ(ソケットクライアント)によって送信され、ユーザー自身の情報
応答:サーバーがユーザーによって送信されたリクエスト情報を解析し、要求を受信し、データを返す(返されたデータのような他のリンクが、含まれていてもよい:等の画像、JS、CSSを、)
PS:アナログクローラと、ブラウザは、その中に有用なデータを抽出するために、応答を受信する要求を送信しながら、応答を受信した後、ブラウザは、ユーザに表示する内容を解析します。
1.3.1
要求
(1)リクエストの実施形態
一般的なリクエストメソッド:GET / POST
URL(2)要求
画像、ファイル、ビデオは一意のURLによって決定することができます、例えばURLグローバルユニフォームリソースロケータ、インターネットの定義のためのユニークなリソース
(3)リクエストヘッダ
ユーザーエージェント:なしユーザーエージェントクライアントの設定がない場合はリクエストヘッダには、サーバが不正ユーザのホストとして、あなたとすることができます。
クッキー:クッキーログイン情報を保存します
注意:一般的にクローラがリクエストヘッダを追加しますか。
注意することが必要なリクエストヘッダパラメータ:
- リファラー:ソースへのアクセスが可能にする(いくつかの大規模なサイトでは、リファラーによるセキュリティチェーン戦略を行い、すべての爬虫類は、シミュレーションに注意を払います)
- User-Agent:ブラウザアクセス(追加するか、彼らはクローラとして扱われます)
- クッキー:リクエストヘッダに注意をもたらします
(4)リクエストボディ
モードは、要求体を得る場合には、本体がないコンテンツ要求されていない後の実施形態では、要求形式のデータが、その場合(GET要求パラメータの後ろに配置されたリクエストURL本体、直接見ることができます)
PS:1、ログインウィンドウ、ファイルのアップロード、情報がリクエストボディ2に装着され、ログイン、間違ったユーザー名とパスワードを入力し、[送信、あなたは通常、右のログインページの後、ポストを見ることができるがジャンプします、キャプチャすることができませんポスト
1.3.2
応答
(1)応答ステータスコード
- 200:成功の代わりに
- 301:の代わりにジャンプ
- 404:ファイルが存在しません。
- 403:アクセスなし
- 502:サーバーエラー
(2)応答ヘッダ
レスポンスヘッダパラメータは、注意する必要があります。Set-Cookieの:BDSVRTM = 0;パス= /:もっとあるかもしれません、ブラウザを伝えることです、クッキーが保存さ
(3)プレビューページのソースであります
JSONデータ
このようなウェブHTML、画像など
バイナリデータ
02
第二に、ベースモジュール
2.1requests
要求は、HTTPライブラリのPythonの実装はurllibはからアップグレードされた使用が簡単です。
オープンソースアドレス:
https://github.com/kennethreitz/requests
中国のAPI:
http://docs.python-requests.org/zh_CN/latest/index.html
正規表現2.2re
正規表現を使用するPythonの組み込みのreモジュールを使用してください。
短所:不安定なデータ処理、ワークロード
2.3XPath
Xpath(XMLパス言語)は言語で情報を見つけるために、XML文書では、XML文書内の要素と属性を横断するために使用することができます。
主にXPathを得るために、Pythonライブラリで使用LXML(lxmlのフレームで使用されていない、インナーフレームは、XPath直接使用することができます)
lxmlのは、主な機能は、HTML / XMLデータを解析して抽出することであるか、HTML / XMLパーサです。
lxmlのと定期的に、Cで実装されているように、高性能のPython HTML / XMLパーサである、我々はすぐに特定の要素およびノード情報を見つけるために、前に学ぶためにXPath構文を使用することができます。
2.4BeautifulSoup
同様にlxmlの、美しいスープはまた、HTML / XMLパーサであると、主な機能は、HTML / XMLデータを解析して抽出する方法です。
使用BeautifulSoupはBS4ライブラリをインポートする必要があります
短所:定期的かつ比較的遅い処理速度のxpath
長所:使いやすいです
2.5Json
JSON(JavaScript Object Notation)は、それはそれは非常に簡単に読み取りおよび書き込みすることができ、軽量のデータ交換フォーマットです。しかし、また、分析・生成機を促進します。シーンデータ交換、などの前景と背景などのサイト間のデータ交換に適しています。
PythonのJSONモジュールは、主にデータJSONを処理するために使用されます。JSONのパースウェブサイト
2.6threading
threading.Threadから直接継承するためのスレッドを作成するスレッドモジュールを使用し、その後、方法およびrunメソッドをオーバーライドし__init__
03
例の第三に、方法
例の3.1get方法
demo_get.py
例の3.2post方法
demo_post.py
エージェント3.3を追加します。
demo_proxies.py
3.4データのクラスインスタンスAJAXを取得
demo_ajax.py
マルチスレッドの使用3.5例
demo_thread.py
04
第四に、爬虫類のフレームワーク
4.1Srcapyフレームワーク
- Scrapyは非常に汎用性、書かれた構造化データアプリケーションフレームワークを抽出し、データをクロールするためのウェブサイトを取る純粋なPythonで実装されています。
- Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。
4.2Scrapy架构图
4.3Scrapy主要组件
- Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
- Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
- Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
- Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
- Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
- Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
- Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)
4.4Scrapy的运作流程
- 引擎:Hi!Spider, 你要处理哪一个网站?
- Spider:老大要我处理xxxx.com。
- 引擎:你把第一个需要处理的URL给我吧。
- Spider:给你,第一个URL是xxxxxxx.com。
- 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
- 调度器:好的,正在处理你等一下。
- 引擎:Hi!调度器,把你处理好的request请求给我。
- 调度器:给你,这是我处理好的request
- 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求
- 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)
- 引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)
- Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。
- 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。
- 管道``调度器:好的,现在就做!
4.5制作Scrapy爬虫4步曲
1新建爬虫项目scrapy startproject mySpider2明确目标 (编写items.py)打开mySpider目录下的items.py3制作爬虫 (spiders/xxspider.py)scrapy genspider gushi365 "gushi365.com"4存储内容 (pipelines.py)设计管道存储爬取内容
五、常用工具
5.1fidder
fidder是一款抓包工具,主要用于手机抓包。
5.2XPath Helper
xpath helper插件是一款免费的chrome爬虫网页解析工具。可以帮助用户解决在获取xpath路径时无法正常定位等问题。
谷歌浏览器插件xpath helper 的安装和使用:
06
六、分布式爬虫
6.1scrapy-redis
Redisの-Scrapy順序はより容易に、Scrapyクロール分散達成(scrapy-RedisのインストールPIP)のRedisに基づいて構成要素のいくつかを提供します
6.2分散ポリシー
- マスター側(コアサーバー):Redisのデータベースを構築するには、クロールの責任を負いません、URLの指紋は、重い刑、要求分布、およびデータを格納するための唯一の責任があります
- よだれエンド(クローラ実行側):マスターするための新たな要求を提出する動作中に、プログラム実行爬虫類の責任