ネットワークステーションcrawlSpiderに基づいscrapy中間データをクロール章VII +クローラー

scrapyミドルウェア

ミドルウェアscrapyは2つに分かれて:
    ものである:エンジンとダウンロードとの間の中間ダウンロード
        機能:エンジンとダウンロードの間に、ミドルウェアによって開始され、この要求と応答データプロジェクト全体傍受することができ
    、別の以下のとおりですとミドルウェアエンジンのクローラとのダウンローダ

?行うに傍受された要求
    のプロキシIPを:request.META [ 代理 ] = HTTP:// IP:ポート
    UAの変装:Request.Headers [ ユーザーエージェント ] = XXXXXX 

のため?ノックダウン応答
    改ざん応答データ(略レスポンスデータを変更しません)
    レスポンスオブジェクトを交換する(エージェントを変更するには、実質的なIP)

scrapyにセレンを使用して、
  爬虫類の仲間のプロパティで定義されています(ブラウザのオブジェクトのセレン)の例は、
  爬虫類における閉鎖(自己、クモ)を書き換えるために、方法にブラウザ・オブジェクト近く
  の爬虫類特性ミドルウェアパラメータprocess_response仲間を介してスパイダークロール
  中間作品には、ブラウザのページのソースデータの取得の準備を自動化
  新しいオブジェクトに応じて、ソースデータページ応答データ
  の新しいオブジェクトには、に応答して返されます


局データcrawlSpiderのクロールに基づいて、

crawlSpiderとスパイダーとの間の関連
    crawlSpiderは蜘蛛のサブクラスである
ファイルベースcrawlSpider爬虫類作成
    scrapy genspider -tクロールPCPRO www.xxx.comを

サンプルコード:

爬虫類ファイルコード:

輸入scrapy
 から scrapy.linkextractorsはインポートLinkExtractorを
 から scrapy.spiders インポートCrawlSpider、ルール
 から sunShinePro.items 輸入SunshineproItem、sunConetent 

http://wz.sun0769.com/index.php/question/questionType?type=4&page=30 
クラスSunSpiderを(CrawlSpider): = ' ' 
    allowed_domains = [ 'www.xxx.com'] 

    start_urls = [ ' http://wz.sun0769.com/index.php/question/questionType?type=4&page= ' ]
     链接提取器
        指定されたルールに従って(許可:レギュラー)アクションで指定されたページソース接続抽出 
    リンク= LinkExtractor(許可= R&LT 'TYPE = 4&ページ= \ D + ' 
    link_detail = LinkExtractor(許可= ' 質問/ \ D + / \ D + \。 broad03.shtml 
    ルール = #1 :データ分析のための規則パーサは、ソース・データ・ページが指定されたルール(コールバックに係る接続に対応する抽出する抽出器を接続) 
        (リンク、コールバック=ルールparse_item ' =従い、、偽)
        (規則をlink_detail、コールバック = ' parse_detail ' )、 
    DEFのparse_detail(セルフ、応答):
        コンテンツ = response.xpath(' / HTML /本体/ DIV [9] /表[2] //のTR [1] / TD / DIV [2] //テキスト()' ).extract()
        コンテンツ = '' .join(コンテンツ)

        アイテム = sunConetent()
        項目[ ' 内容' ] = コンテンツ

        降伏項目

    DEFのparse_item(セルフ、応答):
         #1 注:TBODY XPathのタグの位置、それはTBODYのスキップする必要がある場合 
        =(tr_listのresponse.xpathを" // * [@ = ID "morelist"] / DIV /表[2] // TR / TD / TR表// ' のための TR tr_list:
            タイトル = tr.xpath('./td [2] / [2] /テキスト()' ).extract_first()
            ステータス = tr.xpath(' ./td [3] /スパン/テキスト()' ).extract_first()
            項目 = SunshineproItem( )
            項目[ 表題 ] = タイトル
            項目[ ステータス ] = ステータス

            収率アイテム

でpipelines.py

クラスSunshineproPipeline(オブジェクト):
     DEF process_item(自己、アイテム、クモ):
         もしアイテム。__class____name__ == ' SunshineproItem ' プリント(アイテム[ ' タイトル' ]、項目[ ' 状態' ])

        プリント(アイテム[ ' コンテンツ' ])
         戻り項目

settings.pyでのパイプラインを開くことを忘れないでください

クモやセレンを使用

サンプルコード:

爬虫類の.pyファイルコード

インポートScrapy 

からセレンインポートwebdriverをの
 クラスWangyiSpider(scrapy.Spider): = ' wangyi ' 
    allowed_domains = [ 'www.xxx.com'] 
    start_urls = [ ' https://news.163.com/world/ ' ] 

    ブラウザ・オブジェクトの例 
    ブロ= webdriver.Chrome(R&LT executable_path = ' C:-oldボーイ\デスクトップ\クローラ\ day05クローラーの\ chromedriver.exe \ユーザー\ ' DEF 構文解析(自己応答):
        div_list = response.xpath (' / HTML /本体/ DIV / DIV [3] / DIVの[4] / DIVの[1] / DIV / DIV / UL /リー/ DIV / DIV 'のためのdiv div_list:
            タイトル = div.xpath(' .// divの[クラス@ = "news_title"] // A /テキスト()' ).extract_first()
            detail_url = div.xpath(.// divの[ @クラスは、= "news_titleは"] / HREF @ // " ).extract_first()
             scrapy.Request(detail_url、self.parse_detail)
             プリント(タイトル、detail_url)

    デフparse_detail(自己、応答):
        コンテンツ(= response.xpathを' // * [@ ID = "endText"] //テキスト()' ).extract()
        コンテンツ = "".join(コンテンツ)
         プリント(コンテンツ)
     DEF 閉じ(自己、クモ):
        self.bro.quit()

でmiddlewares.py

クラスWangyiproDownloaderMiddleware(オブジェクト):
    表現スパイダーは、オブジェクトインスタンス化爬虫類である
    DEFのprocess_response(セルフ、要求、応答、スパイダーを):
        は、レスポンスオブジェクトはニーズ満たすために変更する必要が満たしていないだろう
        #のボディを:データに応じて、
        取得する方法?爬虫類は、ブラウザオブジェクトで生成されたこと
        IF request.url == ' https://news.163.com/world/ ' 
            ブロ = spider.bro 
            bro.get(https://news.163.com /ワールド/ ' 
            SLEEP( 2 #のスクロールバーを一番下までスクロールします 
            (bro.excute_script 'window.scrollToは(0、document.body.scrollHeight)' 
            睡眠( 1 
            bro.excute_script(' window.scrollToは(0、document.body.scrollHeight)' 
            睡眠( 1 
            bro.excute_script(' window.scrollToは( 0、document.body.scrollHeight)' 
            睡眠( 1 
            page_text = bro.page_source 

            new_response = HtmlResponse(URL = bro.current_url、本体= page_text、エンコード= ' UTF-8 '、要求= 要求)

            リターンnew_response
         返すレスポンス#は元のデータに戻らなければならない、または唯一の一部を取得することができます

settings.pyでは、次のパラメータを設定する必要があります。

エンジンとダウンロードの間#中間
DOWNLOADER_MIDDLEWARES = { ' wangyiPro.middlewares.WangyiproDownloaderMiddleware ':543 }

 

おすすめ

転載: www.cnblogs.com/zty1304368100/p/11055203.html