I.基本概念
- scrapy:爬虫類のフレームワーク。 非同期、高性能データ解析クロール + 永続ストレージ操作を、 それが様々な機能(高性能非同期ダウンロード、キュー、分散、解像度、持続性、等)を統合プロジェクトテンプレートは非常に汎用性を有します。 - フレームワークは:多くの機能を統合し、汎用性の高いプロジェクトテンプレートがある - どのようなフレームワークを学ぶ: -フレームワークを学んで、特定の機能モジュールの使用を。
-機能scrapyフレームワーク:
-高パフォーマンスのデータ分析
-高パフォーマンスの永続ストア
-ミドルウェア
-分散
-非同期データのダウンロード(ツイストベースの実装)
- pyspiderやや悪いscrapy、汎用性に比べ
II。インストール環境
Windowsシステム: 。A PIPは、ホイール(エンドWHLファイルをインストールするために)インストール のb HTTPツイスト:.ダウンロード //www.lfd.uci.edu/~gohlke/pythonlibs/ #ツイスト ピップは、ツイスト・インストールの実行、ダウンロードディレクトリにCを。 18.9 0.0-CP36-cp36m-win_amd64.whl 。PIP pywin32のDをインストールする 。E PIP Scrapyインストール Linuxシステム: インストールPIP Scrapyを
III。使用方法
- ①プロジェクトの作成:scrapy startprojectのランボーを(proname) - ②CDランボー(proname) - クローラー(スパイダー)でクローラ③ファイルフォルダを作成します。scrapyのgenspiderファースト(spiderName)www.xxx.com - ④プロジェクトの実施:第scrapyクロール(spiderName)
scrapyクロール爬虫類の名前は:実行のこのタイプは、表示されたログ情報の形で行わ
scrapyクロール爬虫類名 --nolog:ログ情報の形で実行の種類が表示されていない実行
アイテムの構造: PROJECT_NAME / scrapy.cfg: PROJECT_NAME / __init__ の.py items.py pipelines.py のsettings.py スパイダース / __init__ の.py メインscrapy.cfg構成情報項目。(実クローラー関連する構成情報ファイルのsettings.py) items.pyは、以下のようなデータ構造化データのために保存されたテンプレート、設定:モデルのDjangoの パイプラインは、データ処理永続化 などのsettings.pyの設定ファイルは、:再帰しますダウンロード、同時遅延の数 のようなクモの爬虫類ディレクトリ:ファイルを作成するには、ルールを解析爬虫類を書きます
四つの基本的な構造:
#- * -コーディング:UTF-8 - * - インポートScrapyの クラスQiubaiSpider(scrapy.Spider): 名 = ' Qiubai ' #のアプリケーションタイトル #クロールドメインを許可(ドメインは、非URLがクロールされていない遭遇した場合データは、一般的に)使用されていないはコメント allowed_domains = [ ' https://www.qiushibaike.com/ ' ] #のURL開始クロール start_urls = [ ' https://www.qiushibaike.com/ ' ] #1 からのアクセスをポストコールバックURLを開始し、その結果を取得し、応答が取得したオブジェクトに応じて、初期送信要求URLの後にパラメータの関数である。関数が返す値はNULLオブジェクトまたは反復的でなければならない
のURLへのリクエストで使用される#1 start_urlsデータ解析データは、順次各オブジェクト応答に割り当てられました
DEF パース(セルフ、応答):
印刷(response.text) #は、文字列型に応じてコンテンツを取得し
印刷(response.body) #コンテンツバイトの適切なタイプを取得
爬虫類ファイル
例:
#嗅事百科作者和内容 #- * -コーディング:UTF-8 - * - インポートscrapyの クラスFirstSpider(scrapy.Spider): 名 = ' 第' #allowed_domains = [ 'www.xxx.com'] start_urls = [ ' https://www.qiushibaike.com/text/ ' ] DEF (自己、応答)解析: div_list = response.xpath(' //のdiv [@ ID = "コンテンツ左"] / DIV ' ) 用の DIV でdiv_list : autor = div.xpath(' ./div [1] / [2] / H2 /テキスト()').extract_first() 含有量 = div.xpath(' ./a/div/span//text()' ).extract() プリント(autor、コンテンツ)
V.永続ストレージ
- 永続的ストレージ: -端末の指示に基づき: - ScrapyクロールQiubai O filePath.csv - 便利:メリット - 欠点:強い制限(のみローカルファイルにデータを書き込むことができ、ファイル拡張子が特定の要件がある) - ベースのパイプライン: -永続ストレージ上のすべての操作は、ファイルのパイプラインパイプラインに書き込む必要があります
- データの永続ストア - 端末の指示に基づき: - 唯一の永続ストレージのメソッドの戻り値を解析することができ - ScrapyクロールSpiderName -o ./ ファイル - エンコード処理パイプライン永続ストアに基づく: - データ解析 - Itemクラスで解析されたデータを格納するためのステートメント関連の属性 - タイプのオブジェクトにパッケージに格納されて解析されたデータ項目は、 - パイプ項目オブジェクトクラスに提示される - 項目は、パイプクラスの項目パラメータprocess_item方法を受け取りあります - 永続ストレージ・オペレーションを書くアイテムに基づいてprocess_item方法 - プロファイルのオープンパイプ - 取引のパイプラインの詳細: - パイプラインファイルクラスが何であるかに該当しますか? - クラスは、解析されたデータは、ある特定のプラットフォームに格納されている表します -process_item方法は意味が何であるかを示す値を返しますか? - 戻り実行すべき次の項目導管クラスに渡されるアイテム - open_spider、close_spider
1.命令は、端末に保存されています
これは、の形の[{}、{}]で構成されなければならない ストレージを指定された出力フォーマットを行う:ファイルデータを格納するための異なる形式で記述されているクロール scrapyクロールクローラ名 - O xxx.json scrapyクロールクローラ名 - O XXX .xmlの scrapyクロール爬虫類名 -o xxx.csv
#示例: #- * -コーディング:UTF-8 - * - インポートscrapyの クラスFirstSpider(scrapy.Spider): 名 = ' 第' #allowed_domains = [ 'www.xxx.com'] start_urls = [ ' https://でwww.qiushibaike.com/text/ ' ] DEF (自己、応答)解析: all_data = [] div_list = response.xpath(' //のdiv [@ ID = "コンテンツ左"] / DIV ' ) 用の DIV でdiv_list : autor = div.xpath("./div [1] / [2] / H2 /テキスト()' ).extract_first() 含有量 = div.xpath(' ./a/div/span//text()' ).extract() #の印刷(autor、コンテンツ) DIC = { ' 作成者' :autor、 ' コンテンツ' :コンテンツ、 ' --- ':" \ n " + " ------------------ ---------------------- " } all_data.append(DIC) 戻り all_data
2.永続ストレージのパイプラインに基づいて、
#在爬虫文件中 # -*- coding: utf-8 -*- import scrapy from qiubaiPro.items import QiubaiproItem class QiubaiSpider(scrapy.Spider): name = 'qiubai' # allowed_domains = ['www.xxx.com'] start_urls = ['https://www.qiushibaike.com/text/'] def parse(self, response): div_list = response.xpath('//div[@id="content-left"]/div') all_data = [] for div in div_list: # author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract() author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() content = div.xpath('./a/div/span//text()').extract() content = ''.join(content) # print(content) #实例化一个item类型的对象 item = QiubaiproItem() #使用中括号的形式访问item对象中的属性 item['author'] = author item['content'] = content #将item提交给管道 yield item
#items.py文件中 import scrapy class QiubaiproItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() #scrapy.Field()万能的数据类型 author = scrapy.Field() content = scrapy.Field()
#pipelines.py(管道文件)中 # -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html #一个类表示的是将解析/爬取到的数据存储到一个平台 import pymysql from redis import Redis #存在本地文件 class QiubaiproPipeline(object): fp = None def open_spider(self,spider): print('开始爬虫......') self.fp = open('./qiubai.txt','w',encoding='utf-8') #可以将item类型的对象中存储的数据进行持久化存储 def process_item(self, item, spider): author = item['author'] print(author, type(author)) content = item['content'] self.fp.write(author+ ":"+content) return item #返回给了下一个即将被执行的管道类 def close_spider(self,spider): print('结束爬虫!!!') self.fp.close() # 存在mysql数据库中 class MysqlPipeLine(object): conn = None cursor = None def open_spider(self,spider): self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='',db='qiubai',charset='utf8') print(self.conn) def process_item(self, item, spider): self.cursor = self.conn.cursor() try: self.cursor.execute('insert into qiubai values("%s","%s")'%(item['author'],item['content'])) self.conn.commit() except Exception as e: print(e) self.conn.rollback() return item def close_spider(self,spider): self.cursor.close() self.conn.close() #存在redis数据库 class RedisPipeLine(object): conn = None def open_spider(self,spider): self.conn = Redis(host='127.0.0.1',port=6379) print(self.conn) def process_item(self,item,spider): dic = { 'author':item['author'], 'content':item['content'] } self.conn.lpush('qiubai',dic)
setting配置文件中
六.移动端数据的爬取
- 移动端数据爬取: - 抓包工具: - fiddler,mitproxy - 在手机中安装证书: - 让电脑开启一个wifi,然后手机连接wifi(手机和电脑是在同一个网段下) - 手机浏览器中:ip:8888,点击超链进行证书下载 - 需要将手机的代理开启:将代理ip和端口号设置成fiddler的端口和fidd所在机器的ip 详细操作查看视频