English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
序章:python スパイダー フレームワークの名前をよく聞いていました。最近、その中のScrapy スパイダー フレームワークを学びました。自分の理解を共有します。説明が不適切な部分があれば、大神たちの指摘をお願いします。
一、Scrapyの初歩的な理解
Scrapyは、ウェブサイトのデータを爬取し、構造化データを抽出するために書かれたアプリケーションフレームワークです。データマイニング、情報処理、または歴史的データの保存などの一連のプログラムに適用できます。
これは最初にページキャプチャ(より正確には、ネットワークキャプチャ)によって設計されており、APIが返すデータ(例えばAmazon Associates Web Services)または一般的なウェブスパイダー。
このドキュメントは、Scrapyの背後の概念を紹介し、Scrapyが必要なものかどうかを理解するために役立ちます。
プロジェクトを開始する準備ができたら、以下を参照してください初級教程。
二、Scrapyのインストール紹介
Scrapy フレームワークの実行プラットフォームおよび関連するアシスタントツール
Scrapyをインストールするにはpipを使用できます(Pythonパッケージをインストールする場合はpipを使用することをお勧めします)。
pip install Scrapy
Windows上のインストール手順:
1、Pythonをインストール 2.7その後、PATH環境変数を変更し、Pythonの実行可能ファイルおよび追加のスクリプトをシステムパスに追加する必要があります。以下のパスをPATHに追加してください:
C:\Python27\;C:\Python27\Scripts\;
これに加えて、cmdコマンドを使用してPathを設定することもできます:
c:\python27\python.exe c:\python27\tools\scripts\win_add2path.py
インストールと設定が完了した後、以下のコマンドを実行できます:python --versionでインストールされたPythonのバージョンを確認してください。(図に示されています。)
2、からhttp://sourceforge.net/projects/pywin32/インストールpywin32
ご確認ください、ダウンロードされたバージョンがシステムに適合しています(win32またはamd64
からhttps://pip.pypa.io/en/latest/installing.htmlpipをインストール
3、コマンドラインウィンドウを開き、pipが正しくインストールされていることを確認します:
pip --バージョン
4、今までのPython 2.7 及びpipが正しく動作していることを確認後、次にScrapyをインストールします:
pip install Scrapy
これでWindows上のScrapyのインストールは完了です。
三、Scrapy入門チュートリアル
1、cmdでScrapyプロジェクトエンジンを作成します。
scrapy startproject tutorial
H:\python\scrapyDemo>scrapy startproject tutorial 新しいScrapyプロジェクト 'tutorial'、テンプレートディレクトリ 'f:\\python27\\lib\\site-packages\\scrapy\\templates\\project', created in: H:\python\scrapyDemo\tutorial 最初のスパイダーを開始するには: cd tutorial scrapy genspider example example.com
2、文件目錄結構如下:
。
解析scrapy框架結構:
3、編寫簡單的爬蟲
1、在item.py中配置需采集頁面的字段實例。
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy from scrapy.item import Item, Field class TutorialItem(Item): title = Field() author = Field() releasedate = Field()
2、在tutorial/spiders/spider.py中書寫要采集的网站以及分別采集各字段。
# -*-coding:utf-8-*- import sys from scrapy.linkextractors.sgml import SgmlLinkExtractor from scrapy.spiders import CrawlSpider, Rule from tutorial.items import TutorialItem reload(sys) sys.setdefaultencoding("utf-8) class ListSpider(CrawlSpider): # 爬蟲名稱 name = "tutorial" # 設置下載延時 download_delay = 1 # 允許域名 allowed_domains = ["news.cnblogs.com"] # 開始URL start_urls = [ "https://news.cnblogs.com" ] # 爬取規則,不带callback表示向該類url遞迴爬取 rules = ( ////page/ ////+ //div[@id="news_title"]-8') item['title'] = title author = response.selector.xpath('//div[@id="news_info"]/span/a/text()')[0].extract().decode('utf-8') item['author'] = author releasedate = response.selector.xpath('//div[@id="news_info"]//text()')[0].extract().decode( 'utf-8') item['releasedate'] = releasedate yield item
3、在tutorial/pipelines.pyパイプラインにデータを保存。
# -*- coding: utf-8 -*- # ここでアイテムパイプラインを定義 # # 忘れずにITEM_PIPELINES設定にパイプラインを追加 # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html import json import codecs class TutorialPipeline(object): def __init__(self): self.file = codecs.open('data.json', mode='wb', encoding='utf-8')#データをdata.jsonに保存 def process_item(self, item, spider): line = json.dumps(dict(item)) + "\n" self.file.write(line.decode("unicode_escape")) return item
4、tutorial/settings.pyに実行環境を設定します。
# -*- coding: utf-8 -*- BOT_NAME = 'tutorial' SPIDER_MODULES = ['tutorial.spiders'] NEWSPIDER_MODULE = 'tutorial.spiders' # コokiesを無効にし、banを防ぎます COOKIES_ENABLED = False COOKIES_ENABLES = False # Pipelineを設定します。ここではデータをファイルに書き込みます ITEM_PIPELINES = { 'tutorial.pipelines.TutorialPipeline': 300 } # スパイダーが爬取する最大深度を設定します DEPTH_LIMIT = 100
5、mainファイルを新規作成してスパイダーのコードを実行します。
from scrapy import cmdline cmdline.execute("scrapy crawl tutorial".split())
最終的に、main.pyを実行し、data.jsonファイルから収集結果のJSONデータを取得します。
これで本文のすべての内容が終わりました。皆様の学習に役立つことを願っています。また、呐喊教程を多くのサポートをお願いします。
声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、アップロードされた内容であり、本サイトは所有権を有しない、また人工編集は行われていない、さらに関連する法的責任も負いません。著作権に抵触する内容が見つかりましたら、メール:notice#wまでご連絡ください。3codebox.com(メールを送信する際、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認が取れましたら、本サイトは即座に侵害を疑われるコンテンツを削除します。)