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 、 }