データ解析クローラ+ - 5 scrapyフレーム、移動端末がクロール

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

详细操作查看视频

 

おすすめ

転載: www.cnblogs.com/lw1095950124/p/11114720.html