リリース・ノート

Scrapy 2.5.0 (2021-04-06)

ハイライト:

非推奨による削除

非推奨

  • scrapy.utils.py36 モジュールは非推奨になり、 scrapy.utils.asyncgen が優先されます。 (issue 4900)

新機能

  • 実験的 DOWNLOAD_HANDLERS 設定にて https プロトコルに割り当てることができる新しいダウンロード・ハンドラーによる実験的な HTTP/2 サポート

  • scrapy.downloadermiddlewares.retry.get_retry_request() 関数は、スパイダー・コールバックまたはミドルウェアから使用し、 RetryMiddleware がサポートするシナリオを超えたリクエストの再試行を処理できます。

  • headers_received シグナルは、レスポンス・ヘッダーへの早期アクセスを提供し、 ダウンロードの中止 を可能にします。 (issue 1772, issue 4897)

  • 新 new Response.protocol 属性は、レスポンスのダウンロードに使用されるプロトコルを識別する文字列へのアクセスを提供します。 (issue 4878)

  • 統計 には、 フィード の保存の成功と失敗の数を示す以下のエントリが含まれるようになりました:

    feedexport/success_count/<storage type>
    feedexport/failed_count/<storage type>
    

    ここで、 <storage type> は、 FileFeedStorage または FTPFeedStorage などのフィード・ストレージ・バックエンド・クラス名です。

    (issue 3947, issue 4850)

  • UrlLengthMiddleware スパイダー・ミドルウェアは、無視されたURLを DEBUG ではなく INFO ログ・レベル でログに記録するようになりました。また、無視されたURLの数を追跡するために 統計 に以下のエントリが含まれるようになりました:

    urllength/request_ignored_count
    

    (issue 5036)

  • HttpCompressionMiddleware ダウンローダー・ミドルウェアは、解凍されたレスポンスの数と結果のバイトの総数をログに記録するようになりました:

    httpcompression/response_bytes
    httpcompression/response_count
    

    (issue 4797, issue 4799)

バグ修正

  • PyPyDispatcherに加えてPyDispatcherをインストールする、PyPyのインストールを修正しました。これにより、インポートされたパッケージによってはScrapyが機能しなくなる可能性がありました。 (issue 4710, issue 4814)

  • コールバックを検査して、それが値も返すジェネレーターであるかどうかを確認するときに、コールバックに続くコードよりも低いインデントのdocstringが含まれている場合、例外が発生しなくなりました。(issue 4477, issue 4935)

  • デフォルトの HTTP/1.1 ダウンロード・ハンドラーを使用する場合、 Content-Length ヘッダーがレスポンスから省略されなくなりました( DOWNLOAD_HANDLERS 参照)。 (issue 5009, issue 5034, issue 5045, issue 5057, issue 5062)

  • handle_httpstatus_all リクエスト・メタ・キー を False に設定すると、 True に設定するのと同じ効果を持つ代わりに、まったく設定しないのと同じ効果があります。 (issue 3851, issue 4694)

文書

品質保証

Scrapy 2.4.1 (2020-11-17)

Scrapy 2.4.0 (2020-10-11)

ハイライト:

  • Python 3.5 のサポートは廃止されました。

  • メディア・パイプラインfile_path メソッドは、源の アイテム にアクセスできるようになりました。

    これにより、アイテム・データに基づいてダウンロード・ファイルのパス(path)を設定できます。

  • FEEDS 設定の新しい item_export_kwargs キーにより、 アイテム・エクスポーター・クラス に渡すキーワード・パラメータを定義できます。

  • フィード・エクスポート が出力ファイルを上書きするか追加するかを選択できるようになりました。

    たとえば、 crawl または runspider コマンドを使用する場合、出力ファイルを上書きするために -o の代わりに -O オプションを使用できます。

  • zstandard がインストールされている場合、Zstd-compressedレスポンス がサポートされるようになりました。

  • クラスのインポート・パスが必要な設定で、代わりにクラス・オブジェクトを渡すことができるようになりました。

必須要件の変更

後方互換性のない変更

  • CookiesMiddleware は再び Request.headers で定義されたクッキーを破棄します。

    現在の実装では既存のコードが壊れる可能性があると報告されたため、Scrapy 2.2.0 で行われたバグ修正を元に戻すことにしました。

    リクエストにクッキーを設定する必要がある場合は、 Request.cookies パラメータを使用してください。

    Scrapy の将来のバージョンには、元に戻されたバグ修正の新しい、より良い実装が含まれます。

    (issue 4717, issue 4823)

非推奨による削除

  • scrapy.extensions.feedexport.S3FeedStorage__init__ メソッドに渡されない場合、実行中のプロジェクト設定から access_keysecret_key の値を読み込まなくなりました。 これらのパラメータを __init__ メソッドに渡すか、あるいは S3FeedStorage.from_crawler を使用する必要があります。 (issue 4356, issue 4411, issue 4688)

  • Rule.process_request は、requestresponse の両方ではなく、単一の request パラメータを期待する呼び出し可能オブジェクトを許可しなくなりました。

非推奨

新機能

バグ修正

  • genspider コマンドは、--force オプションを使用しない限り既存のファイルを上書きしなくなりました (issue 4561, issue 4616, issue 4623)

  • 値が空のクッキーは無効なクッキーとは見なされくなりました(issue 4772)

  • runspider コマンドは、ファイル拡張子 .pyw のファイルをサポートするようになりました。 (issue 4643, issue 4646)

  • HttpProxyMiddleware ミドルウェアは、サポートされていないプロキシ値を単に無視するようになりました (issue 3331, issue 4778)

  • return 文でジェネレータのコールバックをチェックしても、ネストされた関数の return 文について警告しなくなりました (issue 4720, issue 4721)

  • システム・ファイル・モードの作成マスクは、startproject コマンドを使用して生成されたファイルのパーミッションに影響しなくなりました (issue 4722)

  • scrapy.utils.iterators.xmliter() は名前空間付きノード名をサポートするようになりました(issue 861, issue 4746)

  • Request オブジェクトは about: の URL達 を持つことができるようになりました。これはヘッドレス・ブラウザを使用しているときに機能します。

文書

品質保証

Scrapy 2.3.0 (2020-08-04)

ハイライト:

  • フィード・エクスポート は、ストレージ・バックエンドとして Google Cloud Storage をサポートするようになりました

  • 新しい FEED_EXPORT_BATCH_ITEM_COUNT 設定により、指定された数のアイテムのバッチで出力アイテムを配信できます。

    これは、特定のストレージ・バックエンド (S3FTP と 今回の GCS) を使用している場合、クロールが完了した後にのみ Scrapy がアイテムの配信を開始する 遅延ファイル配信 の回避策としても機能します。

  • itemloaders の基本実装は別のライブラリ itemloaders に移動され、Scrapy の外部からの使用と別のリリースのスケジューリングが可能になりました。

非推奨による削除

  • 以下のクラスとその親モジュールを scrapy.linkextractors から削除しました:

    • htmlparser.HtmlParserLinkExtractor

    • regex.RegexLinkExtractor

    • sgml.BaseSgmlLinkExtractor

    • sgml.SgmlLinkExtractor

    代わりに LinkExtractor を使用してください (issue 4356, issue 4679)

非推奨

  • scrapy.utils.python.retry_on_eintr 関数は非推奨になりました (issue 4683)

新機能

バグ修正

文書

品質保証

  • itemloaders の基本実装は itemloaders に移動しました。 (issue 4005, issue 4516)

  • いくつかのスケジューラーテストの沈黙エラー(silenced error)を修正 (issue 4644, issue 4645)

  • SSLテストに使用されるローカルホスト証明書を更新 (issue 4650)

  • Python2固有のクッキー処理コードを削除 (issue 4682)

  • Python 2 unicode リテラル構文の使用を停止 (issue 4704)

  • 行継続のためのバックラッシュの使用をやめました (issue 4673)

  • MyPy 例外リストから不要なエントリを削除 (issue 4690)

  • 継続的インテグレーション・システムの一部として自動テストがWindowsでパス(pass)するようになりました (issue 4458)

  • 自動テストは、継続的インテグレーション・システムでサポートされている Python バージョンの最新の PyPy バージョンに合格するようになりました (issue 4504)

Scrapy 2.2.1 (2020-07-17)

  • startproject コマンドは、実行パーミッションの削除など、宛先フォルダー内のファイルのパーミッションに意図しない変更を加えなくなりました。 (issue 4662, issue 4666)

Scrapy 2.2.0 (2020-06-24)

ハイライト:

後方互換性のない変更

  • Python 3.5.0 および 3.5.1 のサポートは廃止されました。 Scrapy は typing.Type が導入された 3.5.2 より前の Python バージョンでの実行を拒否するようになりました。 (issue 4615)

非推奨

新機能

バグ修正

  • CookiesMiddleware はもはや Request.headers で定義されたクッキーを破棄しません (issue 1992, issue 2400)

  • CookiesMiddleware は、 Request__init__ メソッドの cookies パラメータで bytes として定義されたクッキーを再エンコードしなくなりました。 (issue 2400, issue 3575)

  • FEEDS が複数の URI を定義し、 かつ FEED_STORE_EMPTYFalse であり、かつ クロールでアイテムが生成されない場合、Scrapy は最初の URI の後にフィードのエクスポートを停止しなくなりました (issue 4621, issue 4626)

  • コルーチン構文 を使用して定義された Spider コールバックは、反復可能オブジェク(iterable)を返す必要がなくなり、代わりに Request オブジェクト、または アイテム 、または None を返す場合があります (issue 4609)

  • startproject コマンドは、生成されたプロジェクト・フォルダとファイルに適切なパーミッションを付与するようになりました (issue 4604)

  • 修正: scrapy.utils.datatypes.LocalWeakReferencedCache から時々発生する KeyError 例外を修正 (issue 4597, issue 4599)

  • FEEDS が複数の URI を定義する場合、保存されているアイテム達に関するログ・メッセージ達には、常にフィードの1つだけに関する情報を含むのではなく、対応するフィード達からの情報が含まれるようになりました。 (issue 4619, issue 4629)

文書

品質保証

Scrapy 2.1.0 (2020-04-24)

ハイライト:

  • FEEDS 設定は複数のフィードにエクスポートするための設定です

  • Response.ip_address 属性

後方互換性のない変更

  • assert 文によって引き起こされる AssertionError 例外は、Scrapy の動作を予期しない方法で変更することなく最適化モード (-O を参照) での Python の実行をサポートするために、新しい例外タイプに置き換えられました。

    あなたが Scrapy から AssertionError 例外をキャッチしたい場合、対応する新しい例外をキャッチするためにあなたのコードを更新して下さい。

    (issue 4440)

非推奨による削除

  • LOG_UNSERIALIZABLE_REQUESTS 設定はサポートされなくなりました。代わりに SCHEDULER_DEBUG を使用してください (issue 4385)

  • REDIRECT_MAX_METAREFRESH_DELAY 設定はサポートされなくなりました。代わりに METAREFRESH_MAXDELAY を使用してください (issue 4385)

  • ChunkedTransferMiddleware ミドルウェアが削除されました。これには scrapy.downloadermiddlewares.chunked モジュール全体が含まれています。これに関わらずチャンク転送はいつでも使用可能です。 (issue 4431)

  • spiders プロパティは Crawler から削除されました.代わりに CrawlerRunner.spider_loader を使用するか、設定で SPIDER_LOADER_CLASS をインスタンス化してください (issue 4398)

  • MultiValueDict と``MultiValueDictKeyError`` と``SiteNode`` クラスは scrapy.utils.datatypes から削除されました (issue 4400)

非推奨

新機能

バグ修正

  • リクエストのシリアライズ は、別の名前の関数が割り当てられたスパイダー属性であるコールバックで壊れなくなりました (issue 4500)

  • allowed_domainsNone 値はもはや TypeError 例外を引き起こしません (issue 4410)

  • Zsh 補完で引数の後のオプションが許可されなくなりました (issue 4438)

  • zope.interface 5.0.0 以降のバージョンがサポートされるようになりました (issue 4447, issue 4448)

  • Spider.make_requests_from_url は Scrapy 1.4.0 で非推奨となり、使用時に警告を発するようになりました (issue 4412)

文書

品質保証

Scrapy 2.0.1 (2020-03-18)

  • Response.follow_all は入力として空のURLの反復可能なオブジェクト(iterable)をサポートするようになりました (issue 4408, issue 4420)

  • トップレベルの reactor インポートを削除して、TWISTED_REACTOR を使用して別の Twisted リアクターを設定するときに間違った Twisted リアクターがインストールされるというエラーを防止しました。 (issue 4401, issue 4406)

  • 修正されたテスト (issue 4422)

Scrapy 2.0.0 (2020-03-03)

ハイライト:

後方互換性のない変更

非推奨による削除

  • Scrapy シェルsel プロキシー・オブジェクトを提供しなくなりました。代わりに response.selector を使用してください (issue 4347)

  • LevelDBのサポートを削除(issue 4112)。

  • 次の関数が scrapy.utils.python から削除されました: isbinarytext, is_writable, setattr_default, stringify_dict (issue 4362)

非推奨

  • SCRAPY_ で始まる環境変数を使用して設定をオーバーライドすることは非推奨です (issue 4300, issue 4374, issue 4375)

  • scrapy.linkextractors.FilteringLinkExtractor は非推奨になりました。代わりに scrapy.linkextractors.LinkExtractor を使って下さい。 (issue 4045)

  • プロキシーURL の noconnect クエリ文字列引数は非推奨となり、プロキシ URL から削除する必要があります (issue 4198)

  • scrapy.utils.python.MutableChain クラスの next メソッドは非推奨になりました。代わりに、グローバルの next() 関数または、 MutableChain.__next__ を使って下さい。 (issue 4153)

新機能

バグ修正

  • crawl コマンドは、クロールの開始前に例外が発生した場合にも終了コード 1 で終了するようになりました (issue 4175, issue 4207)

  • LinkExtractor.extract_links は UTF-8 以外のレスポンスからクエリ文字列または URL を再エンコードしなくなりました (issue 998, :issue :1403, issue 1949, issue 4321)

  • 最初のスパイダーミドルウェア( SPIDER_MIDDLEWARES 参照) は、ジェネレーターであるコールバックから発生した例外も処理するようになりました。 (issue 4260, issue 4272)

  • 3 つのスラッシュ (///) で始まる URL へのリダイレクトがサポートされるようになりました (issue 4032, issue 4042)

  • Request は、コロンがあるという理由だけで文字列を url として受け入れなくなりました (issue 2552, issue 4094)

  • 正しいエンコーディングが MailSender のアタッチ名に使用されるようになりました (issue 4229, issue 4239)

  • DUPEFILTER_CLASS のデフォルトである RFPDupeFilter は Windows の各行に余分な \r 文字を書き込まなくなりました。これによりプラットフォーム上で requests.seen ファイルのサイズが不必要に大きくなっていました。 (issue 4283)

  • Zシェルの自動補完は .http ファイルではなく .html ファイルを検索し、-h コマンドラインスイッチをカバーするようになりました。 (issue 4122, issue 4291)

  • limit が定義されていない scrapy.utils.datatypes.LocalCache オブジェクトにアイテムを追加しても、もはや TypeError 例外が発生することはありません。 (issue 4123)

  • scrapy.utils.misc.create_instance()settingscrawler の両方を None に設定したときに発生する ValueError 例外のメッセージのタイプミスを修正しました ( issue 4128)

文書

品質保証

スケジューラー・キュー・クラス群の変更

以下の変更は、すべての型のカスタム・キュー・クラスに影響を与える可能性があります:

  • push メソッドは、もはや request.priority * -1 を含む 2 番目の位置パラメータを受け取りません。 その値が必要な場合は、代わりに最初の位置パラメータ request から取得するか、 scrapy.core.scheduler.ScrapyPriorityQueue サブクラスの新しい priority() メソッドを使用してください。

次の変更は、カスタム・プライオリティ・キュー・クラスに影響する可能性があります:

  • __init__ メソッドまたは from_crawler または from_settings クラスメソッド内で:

    • 以前はファクトリ関数 qfactory を含んでいたパラメータが、 downstream_queue_cls という名前のキーワード・パラメータとして渡されるようになりました。

    • 新しいキーワード・パラメータが追加されました: key これは、メモリ・キューでは常に空の文字列であり、ディスク・キューでは JOB_DIR 値を示す文字列です。

    • 以前のクロールのデータを含むディスク・キューのパラメータ、startprios または slot_startprios は、startprios という名前のキーワード・パラメータとして渡されるようになりました。

    • serialize パラメータは渡されなくなりました。 ディスク・キュー・クラスは、 scrapy.utils.reqser モジュールの request_to_dict()request_from_dict() 関数を使用して、ディスクに書き込む前にリクエストのシリアル化を処理する必要があります。

以下の変更は、カスタムの ディスクおよびメモリの キュー・クラスに影響を与える可能性があります:

  • __init__ メソッドのシグネチャは今や __init__(self, crawler, key) です。

以下の変更は、特に scrapy.core.schedulerScrapyPriorityQueueDownloaderAwarePriorityQueue クラスと、そのサブクラスに影響を与える可能性があります:

  • __init__ メソッドでは、上記の変更のほとんどが適用されます。

    __init__ は引き続きすべてのパラメータを位置パラメータとして受け取りますが、以下のようになります:

    • qfactory を置き換えた downstream_queue_cls は、別の方法でインスタンス化する必要があります。

      qfactory は優先値 (整数) でインスタンス化されました。

      downstream_queue_cls のインスタンスは、新しい ScrapyPriorityQueue.qfactory または DownloaderAwarePriorityQueue.pqfactory メソッドを使用して作成する必要があります。

    • 新しい key パラメータは、startprios パラメータ 1 の位置を右に移動しました。

  • 以下のクラス属性が追加されました:

    • crawler

    • downstream_queue_cls (詳細上記)

    • key (詳細上記)

  • serialize 属性は削除されました (詳細上記)

以下の変更は特に ScrapyPriorityQueue クラスとそのサブクラスに影響を与える可能性があります:

  • 新しい priority() メソッドが追加されました。このメソッドはリクエストを与えると request.priority * -1 を返します。

    これは push() で使用され、その priority パラメータの削除を補います。

  • spider 属性は削除されました。 代わりに crawler.spider を使用してください。

以下の変更は特に DownloaderAwarePriorityQueue クラスとそのサブクラスに影響を与える可能性があります:

  • 新しい pqueues 属性は、ダウンローダー・スロット名を downstream_queue_cls の対応するインスタンスにマッピングします。

(issue 3884)

Scrapy 1.8.0 (2019-10-28)

ハイライト:

後方互換性のない変更

下記の 非推奨による削除 も参照してください。

新機能

バグ修正

文書

非推奨による削除

  • scrapy.xlib は削除されました (issue 4015)

非推奨

  • HttpCacheMiddlewareLevelDB ストレージ・バックエンド (scrapy.extensions.httpcache.LeveldbCacheStorage) は非推奨です (issue 4085, issue 4092)

  • 文書化されていない SCRAPY_PICKLED_SETTINGS_TO_OVERRIDE 環境変数の使用は非推奨です (issue 3910)

  • scrapy.item.DictItem は非推奨です。代わりに Item を使って下さい (issue 3999)

その他の変更

Scrapy 1.7.4 (2019-10-21)

いくつかの望ましくない副作用がある issue 3804 の修正( issue 3819 )を元に戻します。 (issue 3897, issue 3976)

その結果、アイテム・ローダーがアイテムで初期化されると、 ItemLoader.load_item() は、後で ItemLoader.get_output_value() を呼び出すか、または ItemLoader.load_item() が空のデータを返します。

Scrapy 1.7.3 (2019-08-01)

Python 3.4では lxml 4.3.5以下を強制する(issue 3912, issue 3918)

Scrapy 1.7.2 (2019-07-23)

Python 2 サポートを修正(issue 3889, issue 3893, issue 3896).

Scrapy 1.7.1 (2019-07-18)

Scrapy 1.7.0の再パッケージ化。PyPIの一部の変更が欠落していました。

Scrapy 1.7.0 (2019-07-18)

注釈

Scrapy 1.7.1を必ずインストールしてください。 PyPIのScrapy 1.7.0パッケージは誤ったコミットタグ付けの結果であり、以下で説明するすべての変更が含まれていません。

ハイライト:

  • 複数のドメインをターゲットとするクロールの改善

  • 引数をコールバックに渡すよりクリーンな方法

  • JSONリクエストの新しいクラス

  • ルールベースのスパイダーの改善

  • フィード・エクスポートの新機能

後方互換性のない変更

  • 429 はデフォルトで RETRY_HTTP_CODES 設定の一部になりました

    この変更は 後方互換性がありません429 を再試行したくない場合は、それに応じて RETRY_HTTP_CODES をオーバーライドする必要があります。

  • CrawlerCrawlerRunner.crawlCrawlerRunner.create_crawler は、もはや Spider のサブクラスのインスタンスを受け入れなくなり、Spider サブクラスのみを受け入れます。

    〜scrapy.spiders.Spider サブクラスのインスタンスは実行することを意図していなかったため、期待どおりに機能していませんでした。渡された 〜scrapy.spiders.Spider サブクラスのインスタンスを使用する代わりに、〜scrapy.spiders.Spider.from_crawler メソッドは、新しいインスタンスを生成するために呼び出されました。

  • SCHEDULER_PRIORITY_QUEUE 設定のデフォルト以外の値が機能しなくなる場合があります。 スケジューラープライオリティキュークラスは、任意のPythonデータ構造ではなく 〜scrapy.http.Request オブジェクトを処理する必要があります。

  • Scheduler クラスの __init__ メソッドに追加の crawler パラメーターが追加されました。 その `` __init__``メソッドで任意のパラメーターを受け入れてないカスタム・スケジューラ・サブクラスは、この変更により破損する可能性があります。

    詳細については、 SCHEDULER を参照してください。

下記の 非推奨による削除 も参照してください。

新機能

バグ修正

文書

非推奨による削除

次の非推奨APIは削除されました(issue 3578):

  • scrapy.conf (Crawler.settings を使用して下さい)

  • scrapy.core.downloader.handlers について:

    • http.HttpDownloadHandler (http10.HTTP10DownloadHandler を使用して下さい)

  • scrapy.loader.ItemLoader._get_values (_get_xpathvalues を使用して下さい)

  • scrapy.loader.XPathItemLoader (ItemLoader を使用して下さい)

  • scrapy.log (ロギング(logging) 参照)

  • scrapy.pipelines について:

    • files.FilesPipeline.file_key (file_path を使用して下さい)

    • images.ImagesPipeline.file_key (file_path を使用して下さい)

    • images.ImagesPipeline.image_key (file_path を使用して下さい)

    • images.ImagesPipeline.thumb_key (thumb_path を使用して下さい)

  • scrapy.selectorscrapy.selector.lxmlsel の両方より:

    • HtmlXPathSelector (Selector を使用して下さい)

    • XmlXPathSelector (Selector を使用して下さい)

    • XPathSelector (Selector を使用して下さい)

    • XPathSelectorList (Selector を使用して下さい)

  • scrapy.selector.csstranslator より:

  • Selector より:

    • `` _root`` ( __init__ メソッド引数とオブジェクト・プロパティの両方で、 root を使用します)

    • extract_unquoted (getall を使用して下さい)

    • select (xpath を使用して下さい)

  • SelectorList より:

    • extract_unquoted (getall を使用して下さい)

    • select (xpath を使用して下さい)

    • x (xpath を使用して下さい)

  • scrapy.spiders.BaseSpider (Spider を使用して下さい)

  • Spider (と、そのサブクラス)より:

  • scrapy.spiders.spiders (SpiderLoader を使用して下さい)

  • scrapy.telnet (scrapy.extensions.telnet を使用して下さい)

  • scrapy.utils.python より:

    • str_to_unicode (to_unicode を使用して下さい)

    • unicode_to_str (to_bytes を使用して下さい)

  • scrapy.utils.response.body_or_str

また、以下の非推奨の設定も削除されました(issue 3578):

非推奨

  • SCHEDULER_PRIORITY_QUEUE 設定の queuelib.PriorityQueue 値は非推奨です。代わりに scrapy.pqueues.ScrapyPriorityQueue を使って下さい。

  • 2つの引数を受け入れない Rule に渡される process_request コールバックは非推奨です。

  • 以下のモジュールは非推奨です:

    • scrapy.utils.http (w3lib.http を使用して下さい)

    • scrapy.utils.markup (w3lib.html を使用して下さい)

    • scrapy.utils.multipart (urllib3 を使用して下さい)

  • scrapy.utils.datatypes.MergeDict クラスは、Python3コードベースでは非推奨です。 代わりに ChainMap を使用してください。 (issue 3878)

  • scrapy.utils.gz.is_gzipped 関数は非推奨です。代わりに scrapy.utils.gz.gzip_magic_number を使って下さい。

その他の変更

Scrapy 1.6.0 (2019-01-30)

ハイライト:

  • より良いWindowsサポート;

  • Python3.7との互換性;

  • .extract_first() + .extract() APIから .get() + .getall() APIへの切り替えを含む、文書の大幅な改善。

  • フィードのエクスポート、FilePipelineおよびMediaPipelineの改善;

  • より優れた拡張性 item_errorrequest_reached_downloader 、それは フィード・エクスポーターとフィード・ストレージと重複フィルターでの from_crawler サポート。

  • scrapy.contracts の修正と新機能;

  • telnetコンソールのセキュリティの改善。最初に Scrapy 1.5.2 (2019-01-22) へのバックポートとしてリリースされました;

  • 非推奨のコードの整理;

  • コードベース全体でのさまざまなバグ修正、小さな新機能、および使いやすさの向上。

セレクターAPI変更

これらはScrapy自体の変更ではなく、Scrapyがxpath/cssセレクターに使用する parsel ライブラリの変更ですが、これらの変更はここで言及する価値があります。Scrapyは現在 parsel>=1.5 に依存しており、Scrapyのドキュメントは最近の parsel API規則に従うように更新されています。

最も目に見える変更は、 .get().getall() セレクター・メソッドが .extract_first().extract() よりも優先されるようになったことです。 これらの新しいメソッドにより、コードがより簡潔で読みやすくなると考えています。 詳細については、 extract() と extract_first() を参照してください。

注釈

現時点では .extract().extract_first() メソッドを非推奨にする 計画 はありません。

もう1つの便利な新機能は、 Selector.attrib プロパティと SelectorList.attrib プロパティの導入です。これにより、HTML要素の属性を簡単に取得できます。 要素属性の選択 を参照してください。

parsel >= 1.5 ではCSSセレクターはキャッシュされるため、同じCSSパスが何度も使用されると高速になります。これは、Scrapyスパイダーではとてもよくあるケースです。コールバックは通常、異なるページで複数回呼び出されます。

カスタム Selector または SelectorList サブクラスを使用している場合、parselの 後方互換性のない 変更がコードに影響する可能性があります。 詳細な説明と改善点の完全なリストについては、 parsel changelog を参照してください。

Telnetコンソール

下位互換性なし : Scrapyのtelnetコンソールには、ユーザー名とパスワードが必要になりました。詳細については、 Telnetコンソール を参照してください。この変更により、 セキュリティの問題 が修正されます。詳細については、 Scrapy 1.5.2 (2019-01-22) リリースノートを参照してください。

新しい拡張機能

  • from_crawler サポートがフィード・エクスポーターとフィード・ストレージに追加されました。 これにより、特に、カスタム・フィードのストレージおよびエクスポーターからScrapy設定にアクセスできます (issue 1605, issue 3348).

  • from_crawler サポートがdupefiltersに追加されました (issue 2956) 。これにより、例えば、dupefilterから設定またはスパイダーにアクセスできます。

  • item_error パイプラインでエラーが発生したときに発生します (issue 3256) ;

  • request_reached_downloader ダウンローダーが新しいリクエストを取得したときに発生します。この信号は、例えばカスタム・スケジューラに便利です。 (issue 3393).

  • 新しい SitemapSpider である sitemap_filter() メソッド。これにより、SitemapSpiderサブクラスの属性に基づいてサイト・マップ・エントリを選択できます (issue 3512).

  • ダウンローダー・ハンドラーの遅延読み込みはオプションになりました。これにより、カスタムダウンローダー・ハンドラーでの初期化エラー処理が向上します。 (issue 3394)

新しい FilePipeline ・ MediaPipeline 機能

scrapy.contracts の改善

  • 規約コードの例外はより適切に処理されます (issue 3377);

  • dont_filter = True は規約リクエストに使用され、同じURLで異なるコールバックをテストできます (issue 3381);

  • Contract サブクラスの request_cls 属性を使用すると、FormRequestなどの規約でさまざまなリクエスト・クラスを使用できます (issue 3383).

  • 規約でのエラーバック(errback)処理を修正しました。例えば200以外のレスポンスを返すURLに対してコントラクトが実行される場合です (issue 3371)

使いやすさの改善

  • RobotsTxtMiddlewareの統計を追加 (issue 3100)

  • telnetホスト/ポートを表示するためにINFOログレベルを使用します (issue 3115)

  • RobotsTxtMiddlewareのIgnoreRequestにメッセージを追加 (issue 3113)

  • Response.followurl 引数のより良い検証 (issue 3131)

  • スパイダーの初期化でエラーが発生すると、Scrapyコマンドからゼロ以外の終了コードが返されます (issue 3226)

  • リンク抽出の改善: "ftp" がスキームリストに追加されました (issue 3152) 。また、 "flv" が一般的なビデオ拡張機能に追加されました (issue 3165)

  • エクスポータが無効になっている場合のエラーメッセージが改善されました (issue 3358);

  • scrapy shell --help は、ローカルファイル( ./file.html )に必要な構文について言及しています ( issue 3496)

  • リファラー・ヘッダー値がRFPDupeFilterログ・メッセージに追加されます (issue 3588)

バグ修正

  • Windowsでの.csvエクスポートの余分な空白行の問題を修正しました (issue 3039);

  • ディスク・キューのオブジェクトをシリアル化するときのPython3でのpickle化エラーの適切な処理 (issue 3082)

  • リクエストをコピーするときにフラグが保持されるようになりました (issue 3342);

  • FormRequest.from_response clickdata は、 input[type=image] の要素を無視してはなりません (issue 3153).

  • FormRequest.from_responseは、重複するキーを保持する必要があります (issue 3247)

文書の改善

非推奨による削除

1.0より前のScrapyモジュール名のための互換性シム(shim)が削除されました (issue 3318):

  • scrapy.command

  • scrapy.contrib (と、全てのサブモジュール)

  • scrapy.contrib_exp (と、全てのサブモジュール)

  • scrapy.dupefilter

  • scrapy.linkextractor

  • scrapy.project

  • scrapy.spider

  • scrapy.spidermanager

  • scrapy.squeue

  • scrapy.stats

  • scrapy.statscol

  • scrapy.utils.decorator

詳細については、 モジュールの再配置 を参照するか、Scrapy1.5.xの非推奨警告による提案を利用してあなたのコードを更新してください。

他の非推奨削除:

  • 非推奨の scrapy.interfaces.ISpiderManager は削除されました。scrapy.interfaces.ISpiderLoader を使って下さい。

  • 非推奨の CrawlerSettings クラスは削除されました (issue 3327).

  • 非推奨の Settings.overridesSettings.defaults 属性は削除されました(issue 3327, issue 3359).

その他の改善、クリーンアップ

Scrapy 1.5.2 (2019-01-22)

  • セキュリティのバグ修正 : Telnetコンソール拡張機能は、コンテンツを http://localhost:6023 にPOSTする不正なWebサイトによって簡単に悪用される可能性があり、Scrapyからそれを悪用する方法は見つかりませんでしたが、ブラウザをだまして悪用するのは非常に簡単であり、ローカル開発環境のリスクを高めます。

    修正には下位互換性がありません ランダムに生成されたパスワードを使用して、デフォルトでtelnetユーザーパスワード認証を有効にします。すぐにアップグレードできない場合は、 TELNETCONSOLE_PORT のデフォルト値の変更を検討してください。

    詳細は telnetコンソール 文書参照

  • botoインポート・エラーが原因で、GCE環境でのバック・ポートCIビルドの失敗。

Scrapy 1.5.1 (2018-07-12)

重要なバグ修正のためのメンテナンス・リリースです。新機能の追加はありません。

Scrapy 1.5.0 (2017-12-29)

このリリースでは、コードベース全体に小さな新機能と改善が加えられています。 いくつかのハイライト:

  • Google Cloud Storageは、FilesPipelineとImagesPipelineでサポートされています。

  • プロキシーへの接続を再利用できるようになったため、プロキシー・サーバーを使用したクロールがより効率的になりました。

  • 警告と例外とログのメッセージが改善され、デバッグが容易になりました。

  • scrapy parse コマンドで、 --meta 引数を介してカスタム・リクエスト・メタを設定できるようになりました。

  • Python 3.6、PyPy、PyPy3との互換性が向上しました。 PyPyとPyPy3は、CIでテストを実行することにより、正式にサポートされるようになりました。

  • HTTP 308と522と524のステータスコードのデフォルト処理が改善されました。

  • 毎度おなじみ文書の改善。

後方互換性の無い変更

  • Scrapy 1.5は、Python3.3のサポートを終了します。

  • デフォルトのScrapy User-Agentは、scrapy.orgへのhttpsリンクを使用するようになりました(issue 2983)。 これは技術的に後方互換性がありません 古い値に依存している場合は、 USER_AGENT をオーバーライドします。

  • custom_settings によってオーバーライドされた設定のログが修正されました。 これは技術的に後方互換性がありません ロガーが [scrapy.utils.log] から [scrapy.crawler] に変更されたためです。 Scrapyログをパースしている場合は、ログパーサーを更新してください (issue 1343).

  • LinkExtractorは、デフォルトで m4v 拡張子を無視するようになりました。これは動作の変更です。

  • 522 と 524 のステータスコードが RETRY_HTTP_CODES に追加されました (issue 2851)

新機能

  • Response.follow 内で <link> タグをサポートしました (issue 2785)

  • ptpython REPL をサポートしました (issue 2654)

  • FilesPipelineとImagesPipelineに対するGoogleCloud Storageのサポート (issue 2923)

  • "scrapy parse" コマンドの新しい --meta オプションにより、追加のrequest.metaを渡すことができます (issue 2883)

  • shell.inspect_response を使用するときは、スパイダー変数に設定します (issue 2812)

  • HTTP 308 恒久的リダイレクト(Permanent Redirect) の処理 (issue 2844)

  • RETRY_HTTP_CODES に 522 と 524 を追加 (issue 2851)

  • 起動時のログバージョン情報 (issue 2857)

  • scrapy.mail.MailSender は今や Python 3 で動作します (Twisted 17.9.0 が必要です)

  • プロキシー・サーバーへの接続(connection)は再利用されます (issue 2743)

  • ダウンローダー・ミドルウェアのためのテンプレートを追加 (issue 2755)

  • パース・コールバックが定義されていない場合のNotImplementedErrorの明示的なメッセージ (issue 2831)

  • CrawlerProcessは、ルート・ログ・ハンドラーのインストールを無効にするオプションが追加されました (issue 2921)

  • LinkExtractorは今やデフォルトで m4v 拡張子を無視します

  • DOWNLOAD_WARNSIZEDOWNLOAD_MAXSIZE の制限を超えるレスポンスのログ・メッセージが改善されました (issue 2927)

  • URLがドメインではなく Spider.allowed_domains に配置されたときに警告を表示します (issue 2250).

バグ修正

  • custom_settings によって上書きされた設定のログを修正しました。 これは技術的に後方互換性がありません ロガーが [scrapy.utils.log] から [scrapy.crawler] に変わるため、必要に応じてログ・パーサーを更新してください (issue 1343)

  • デフォルトのScrapy User-Agentは、scrapy.orgへのhttpsリンクを使用するようになりました(issue 2983)。 これは技術的に後方互換性がありません 古い値に依存している場合は、 USER_AGENT をオーバーライドします。

  • PyPyとPyPy3のテストの失敗を修正し、それらを公式にサポートします (issue 2793, issue 2935, issue 2990, issue 3050, issue 2213, issue 3048)

  • DNSCACHE_ENABLED=False の時のDNSリゾルバーを修正 (issue 2811)

  • Debian Jessie tox test envの cryptography を追加します (issue 2848)

  • リクエスト・コールバックが呼び出し可能かどうかを確認するための検証を追加します (issue 2766)

  • extras/qpsclient.py を Python 3 に移植しました (issue 2849)

  • Python3の環境下でgetfullargspecを使用した時の非推奨警告をやめました (issue 2862)

  • 非推奨のテスト・エイリアスを更新 (issue 2876)

  • 代替リンク(alternate link)の SitemapSpider サポートを修正 (issue 2853)

文書

  • AUTOTHROTTLE_TARGET_CONCURRENCY 設定に欠落していた箇条書きを追加。 (issue 2756)

  • 寄稿文書を更新し、新しいサポート・チャネルを文書化します (issue 2762, issue:3038)

  • 文書にScrapy subredditへの参照を含めます

  • 誤ったリンクを修正。 外部へのリンクには https:// を使用 (issue 2978, issue 2982, issue 2958)

  • CloseSpider拡張機能をより適切に文書化 (issue 2759)

  • MongoDBの例で pymongo.collection.Collection.insert_one() を使用 (issue 2781)

  • スペルミスとタイプミス (issue 2828, issue 2837, issue 2884, issue 2924)

  • CSVFeedSpider.headers 文書を明確にしました (issue 2826)

  • DontCloseSpider 例外を文書化し、 spider_idle を明確にします (issue 2791)

  • README の "Releases" 節を更新 (issue 2764)

  • DOWNLOAD_FAIL_ON_DATALOSS 文書内の rst 文法 を修正 (issue 2763)

  • startproject引数の説明の些細な修正 (issue 2866)

  • Response.body文書でデータ型を明確にする (issue 2922)

  • request.meta['depth'] に関する注記をDepthMiddleware文書に追加 (issue 2374)

  • request.meta['dont_merge_cookies'] に関する注記をCookiesMiddleware文書に追加 (issue 2999)

  • プロジェクト構造の例を更新 (issue 2964, issue 2976)

  • ItemExportersの使用例を改善 (issue 2989)

  • スパイダーとダウンローダーミドルウェアのための from_crawler メソッドについて文書化 (issue 3019)

Scrapy 1.4.0 (2017-05-18)

Scrapy 1.4は、それほど多くの息をのむような新機能をもたらしませんが、それでもかなりの数の便利な改善をもたらします。

Scrapyは、新しい設定 FTP_USERFTP_PASSWORD を介して、カスタマイズ可能なユーザーとパスワードを使用した匿名FTPセッションをサポートするようになりました。 また、Twistedバージョン17.1.0以降を使用している場合、Python3でFTPを使用できるようになりました。

リクエストを作成するための新メソッド response.follow があります。 これは、Scrapyスパイダーでリクエストを作成するための推奨される方法になりました。 この方法により、正しいスパイダーを簡単に作成できます。 response.follow には、 scrapy.Request オブジェクトを直接作成するよりもいくつかの利点があります。

  • 相対URLを処理します;

  • 非UTF8ページの非ASCII URLで適切に機能します;

  • 絶対URLと相対URLに加えて、セレクターをサポートします。 <a> 要素の場合、href値を抽出することもできます。

たとえば、以下の代わりに:

for href in response.css('li.page a::attr(href)').extract():
    url = response.urljoin(href)
    yield scrapy.Request(url, self.parse, encoding=response.encoding)

以下のように書くことができます:

for a in response.css('li.page a'):
    yield response.follow(a, self.parse)

リンクエ抽出器も改善されています。 これらは、汎用の最新のブラウザと同じように機能します。 Link オブジェクトを作成するときに、先頭と末尾の空白が属性から削除されます(例えば href="   http://example.com" と考えて下さい)。この空白の削除は、 FormRequest を含む action 属性でも発生します。

リンク抽出器はデフォルトでURLを正規化しないことにも注意してください。 これは時々ユーザーを困惑させていました、そしてそれは実際にはブラウザがすることではないので、抽出されたリンクの余分な変換を削除しました。

Scrapyがリンクをたどるときに送信する Referer: ヘッダーをより細かく制御したい場合は、独自の Referrer Policy を設定できます。 Scrapy 1.4より前は、デフォルトの RefererMiddleware HTTPリクエストを生成したレスポンスのURLに単純かつ盲目的に設定していました(URLシードの情報が漏洩する可能性がありました)。 デフォルトでは、Scrapyは通常のブラウザと同じように動作するようになりました。 また、このポリシーは、W3C標準値(または必要に応じて独自のカスタム値)を使用して完全にカスタマイズできます。 詳細については、 REFERRER_POLICY を参照してください。

Scrapyスパイダーのデバッグを容易にするために、Scrapyはデフォルトで1.4でより多くの統計をログに記録します。それらは、メモリ使用統計、詳細な再試行統計、詳細なHTTPエラー・コード統計 です。 同様の変更として、HTTPキャッシュパスがログにも表示されるようになりました。

最後になりますが、Scrapyには、新しい FEED_EXPORT_INDENT 設定を使用して、JSONおよびXMLアイテムをより人間が読みやすいようにするオプションがあり、アイテム間の改行やカスタム・インデント・オフセットもあります。

Enjoy! (または、このリリースの残りの変更について読んでください。)

非推奨と下位互換性のない変更

  • デフォルトは scrapy.linkextractors.LinkExtractorcanonicalize=False です (issue 2537, fixes issue 1941 and issue 1982) 警告:これは技術的に後方互換性がありません

  • デフォルトでメモリ拡張を有効にします (issue 2539, fixes issue 2187) 。 これは技術的に後方互換性がありません。 ですので、デフォルト以外の MEMUSAGE_*** オプションが設定されているかどうかを確認してください。

  • EDITOR 環境変数は、settings.py で定義された EDITOR オプションよりも優先されるようになりました (issue 1829) 。 Scrapyのデフォルト設定は、環境変数に依存しなくなりました。 これは技術的には後方互換性のない変更です。

  • Spider.make_requests_from_url は非推奨です (issue 1728, fixes issue 1495)

新機能

バグ修正

  • LinkExtractorは、属性から先頭と末尾の空白を削除するようになりました (issue 2547, 修正 issue 1614)

  • FormRequest のaction属性で空白を適切に処理する (issue 2548)

  • すべてのHTTPヘッダーが受信されるまでプロキシからのCONNECTレスポンス・バイトをバッファリングします (issue 2495, 修正 issue 2491)

  • Twisted>=17.1 を使用している場合、FTPダウンローダーがPython3で動作するようになりました (issue 2599)

  • コンテンツを解凍した後、ボディを使用してレスポンス・タイプを選択します (issue 2393, 修正 issue 2145)

  • 常に Content-Encoding: gzipHttpCompressionMiddleware ステージで解凍します (issue 2391)

  • Spider.custom_settings のカスタムログレベルを尊重します (issue 2581, fixes issue 1612)

  • macOS の 'make htmlview' 修正 (issue 2661)

  • 削除:コマンドリストから "commands" を削除 (issue 2695)

  • 本文が空のPOSTリクエストの重複するContent-Lengthヘッダーを修正しました (issue 2677)

  • 大量のダウンロードを適切にキャンセルします。例えば上記の DOWNLOAD_MAXSIZE (issue 1616)

  • ImagesPipeline: パレットを使用した透明なPNG画像の処理を修正しました (issue 2675)

整理とリファクタリング

  • テスト: 一時ファイルとフォルダーの削除 (issue 2570) 、macOSでのProjectUtilsTestの修正 (issue 2569) 、Travis CIでのLinux用のポータブルpypyの使用 (issue 2710)

  • CrawlSpiderの _requests_to_follow からリクエスト構築を分離します (issue 2562)

  • 削除: “Python 3 progress” バッジを削除 (issue 2567)

  • .gitignore にさらに数行追加します (issue 2557)

  • バンプバージョン(bumpversion)のプレリリース構成を削除します (issue 2159)

  • 追加: codecov.yml ファイル追加 (issue 2750)

  • Twistedのバージョンに基づいてコンテキスト・ファクトリの実装を設定します (issue 2577, 修正 issue 2560)

  • デフォルトのプロジェクト・ミドルウェア・テンプレートに省略された self 引数を追加 (issue 2595)

  • ExecutionEngineで冗長な slot.add_request() 呼び出しを削除 (issue 2617)

  • scrapy.pipelines.files.FSFilesStore でより具体的な os.error 例外をキャッチします (issue 2644)

  • "localhost" テスト・サーバー証明書を変更 (issue 2720)

  • 削除: 未使用の MEMUSAGE_REPORT 設定を削除 (issue 2576)

文書

Scrapy 1.3.3 (2017-03-10)

バグ修正

  • 依存関係が欠落していて、 SPIDER_MODULES が間違っているため、デフォルトで SpiderLoaderImportError を再度発生させます。これらの例外は、1.3.0以降警告として沈黙させていました。必要に応じて警告と例外を切り替えるための新しい設定が導入されました。 詳細については、 SPIDER_LOADER_WARN_ONLY を参照してください。

Scrapy 1.3.2 (2017-02-13)

バグ修正

  • 辞書との間で変換するときにリクエスト・クラスを保持(utils.reqser) (issue 2510)

  • チュートリアルの作成者フィールドに一貫したセレクターを使用します (issue 2551)

  • Twisted 17+のTLS互換性を修正 (issue 2558)

Scrapy 1.3.1 (2017-02-08)

新機能

  • ブーリアン設定で 'True'' False' 文字列値をサポートします (issue 2519) 。 あなたは scrapy crawl myspider -s REDIRECT_ENABLED=False のようなことができるようになりました。

  • response.xpath() でkwargsをサポートして、 XPath変数 とアドホックな名前空間宣言を使用します。これには、少なくとも Parsel v1.1 が必要です。 (issue 2457)

  • Python 3.6のサポートを追加 (issue 2485)

  • PyPyでテストが走ります(警告:一部のテストはまだ失敗するため、PyPyはまだサポートされていません)。

バグ修正

  • DNS_TIMEOUT 設定を適用 (issue 2496)

  • 修正: view コマンド。 v1.3.0 でデグレてた。 (issue 2503)

  • ファイル/画像 パイプラインでの *_EXPIRES settings に関するテストを修正 (issue 2460)

  • 基本的なプロジェクト・テンプレートを使用するときに生成されるパイプライン・クラスの名前を修正 (issue 2466)

  • Twisted 17+ との互換性を修正 (issue 2496, issue 2528)

  • Python 3.6での scrapy.Item の継承を修正 (issue 2511)

  • SPIDER_MIDDLEWARESDOWNLOADER_MIDDLEWARESEXTENSIONSSPIDER_CONTRACTS のコンポーネントの順序の為に数値を適用します (issue 2420)

文書

  • コーディング規範(Code of Conduct)節を書き直し、 Contributor Covenant v1.4 にアップグレードします。 (issue 2469)

  • スパイダー引数を渡すと、それらがスパイダー属性に変換されることを明確にします (issue 2483)

  • FormRequest.from_response()formid 引数について文書化 (issue 2497)

  • READMEファイル達に .rst 拡張子を追加 (issue 2507)

  • LevelDBキャッシュ・ストレージ・バックエンドに言及します (issue 2525)

  • コールバック・コード例で yield を使用 (issue 2533)

  • .re()/.re_first() デコードするHTML要素に関する注記を追加 (issue 1704)

  • タイプミス (issue 2512, issue 2534, issue 2531)

整理

  • MetaRefreshMiddleware の冗長なチェックを削除 (issue 2542)

  • LinkExtractor で allow/deny パターンをより速くチェックします (issue 2538)

  • 古いTwistedバージョンをサポートするデッド・コードを削除 (issue 2544)

Scrapy 1.3.0 (2016-12-21)

このリリースは、1.2.2のある主要な理由により、1.2.2の直後の版となります。0.18から1.2.2(含まれる)以降のリリースでは、Twisted(scrapy.xlib.tx.*)からのバックポートされたコードを使用することがわかりました。 より新しいTwistedモジュールが利用できる場合でも。 Scrapyは twisted.web.clienttwisted.internet.endpoints を直接使用するようになりました。(以下のクリーンアップも参照してください。)

これは大きな変更であるため、1.2シリーズを使用しているプロジェクトを壊すことなく、バグをすばやく修正したかったのです。

新機能

  • MailSenderto 引数と cc 引数の値として単一の文字列を受け入れるようになりました(issue 2272)

  • Scrapyシェル内の scrapy fetch urlscrapy shell urlfetch(url) はデフォルトでHTTPリダイレクトに従います。(issue 2290) 詳細については、fetchshell を参照してください。

  • HttpErrorMiddlewareDEBUG ではなく INFO レベルでエラーを記録するようになりました。 これは技術的には 後方互換性がない ので、ログパーサーを確認してください。

  • デフォルトでは、ロガー名は以前のリリースの短い「トップレベル」バリアント(例 [scrapy])ではなく、長い形式のパス [scrapy.extensions.logstats] を使用するようになりました。短いロガー名の部分を期待するログパーサーがある場合、 後方互換性がありませんLOG_SHORT_NAMESTrue に設定して、短いロガー名に戻すことができます。

依存関係整理とコード整理

  • Scrapyには Twisted >= 13.1 が必要になりました。これは、すでに多くのLinuxディストリビューションに当てはまります。

  • その結果、 scrapy.xlib.tx.* モジュール群を削除しました。これは、 "古い" Twistedのバージョンでスタックしているユーザー向けにTwistedコードの一部をコピーしていました。

  • ChunkedTransferMiddleware は非推奨になり、デフォルトのダウンローダー・ミドルウェアから削除されました。

Scrapy 1.2.3 (2017-03-03)

  • パッケージの修正:setup.pyでサポートされていないTwistedバージョンを禁止します。

Scrapy 1.2.2 (2016-12-06)

バグ修正

  • パイプラインが open_spider() で失敗したときの不可解なトレースバックを修正しました (issue 2011)

  • 埋め込まれたIPythonシェル変数を修正 (1.2.0で再表示された issue 396 の修正は issue 2418 )

  • robots.txtを扱う際のいくつかのパッチ:

    • (非標準の)相対サイトマップURLを処理 (issue 2390)

    • Python 2で非ASCIIのURLとUser-Agentを処理 (issue 2373)

文書

その他の変更

  • conda-forge をScrapyの公式condaチャンネルとして宣伝する (issue 2387)

  • テキスト以外のレスポンスで .css() または .xpath() を使用しようとした場合の、より役立つエラーメッセージ (issue 2264)

  • startproject コマンドは、サンプルの middlewares.py ファイルを生成するようになりました (issue 2335)

  • scrapy version の詳細出力に依存関係のバージョン情報を追加します (issue 2404)

  • ソース配布からすべての *.pyc ファイルを削除 (issue 2386)

Scrapy 1.2.1 (2016-10-21)

バグ修正

  • TLS/SSL接続を確立するときにOpenSSLのより寛容な(permissive)デフォルト暗号を含めます (issue 2314)

  • 非ASCIIURLリダイレクトでの "Location" HTTPヘッダー・デコードを修正 (issue 2321)

文書

  • JsonWriterPipeline例を修正 (issue 2302)

  • さまざまな注意事項: issue 2330 はスパイダー名、 issue 2329 はミドルウェア・メソッドの処理順序、 issue 2327 は複数値(multi-valued)のHTTPヘッダーをリストとして取得します。

その他の変更

  • 組み込みのスパイダー・テンプレートの start_urls から www. を削除 (issue 2299)

Scrapy 1.2.0 (2016-10-03)

新機能

  • 新しい FEED_EXPORT_ENCODING 設定は、アイテムをファイルに書き込むときに使用されるエンコーディングをカスタマイズします。 これは、JSON出力で \uXXXX エスケープをオフにするために使用できます。 これは、XMLまたはCSV出力にUTF-8以外のものが必要な場合にも便利です。(issue 2034)

  • startproject コマンドは、プロジェクト名に基づいてデフォルトのディレクトリを上書きするオプションの宛先ディレクトリをサポートするようになりました。(issue 2005)

  • 新しい SCHEDULER_DEBUG 設定は、リクエストのシリアル化エラーをログに記録します(issue 1610)

  • JSONエンコーダーが set インスタンスのシリアル化をサポートするようになりました(issue 2058)

  • application/json-amazonui-streamingTextResponse として解釈する(issue 1503).

  • シェルツール( shellinspect_response) を使用すると、デフォルトで scrapy がインポートされます (issue 2248)

バグ修正

  • DefaultRequestHeaders ミドルウェアは、UserAgentミドルウェアの前に実行されるようになりました( issue 2088 )。 警告:これは技術的に後方互換性がありません。 ただし、これはバグ修正と見なされます。

  • .scrapy データ・ディレクトリを使用するHTTPキャッシュ拡張機能とプラグインは、プロジェクトの外部で機能するようになりました (issue 1581) 。 警告:これは技術的に後方互換性がありません。 ただし、これはバグ修正と見なされます。

  • Selector は、 responsetext の両方を渡すことを許可しなくなりました (issue 2153)

  • scrapy parse で間違ったコールバック名のロギングを修正 (issue 2169)

  • 奇妙なgzip解凍バグの修正 (issue 1606)

  • CrawlSpiderscrapy parse とともに使用する場合の選択されるコールバックの修正 (issue 2225)

  • スパイダーがアイテムを生成しない場合の無効なJSONおよびXMLファイルの修正 (issue 872)

  • ログの警告を回避するために flush() fpr StreamLogger を実装 (issue 2125)

リファクタリング

テストと動作要件

Scrapyの新しい動作要件基準はDebian 8 "Jessie" です。 以前はUbuntu 12.04 Precise でした。 つまりこれは、 Twisted 14.0, pyOpenSSL 0.14, lxml 3.4 (メイン)パッケージで、かつ最低でも表記のバージョン以上で継続的インテグレーション・テストを実行するということです。

Scrapyは、これらのパッケージの古いバージョンで非常にうまく機能する可能性があります(たとえば、コードベースにはまだ古いTwistedバージョンのスイッチがあります)が、保証されていません(テストされていないため)。

文書

Scrapy 1.1.4 (2017-03-03)

  • パッケージの修正:setup.pyでサポートされていないTwistedバージョンを禁止します。

Scrapy 1.1.3 (2016-09-22)

バグ修正

  • ImagesPipelineFilesPipeline のサブクラスのクラス属性は1.1.1以前と同じように機能します (issue 2243, 修正 issue 2198)

文書

Scrapy 1.1.2 (2016-08-18)

バグ修正

  • 欠落している IMAGES_STORE_S3_ACL 設定を導入して、S3に画像をアップロードするときに ImagesPipeline のデフォルトのACLポリシーを上書きします(Scrapy 1.1.0以降、デフォルトのACLポリシーは "public-read" ではなく "private" であることに注意してください)

  • IMAGES_EXPIRES 値が90に戻されました(デグレは1.1.1で発生しました)

Scrapy 1.1.1 (2016-07-13)

バグ修正

  • HTTPSプロキシーへのCONNECTリクエストに "Host" ヘッダーを追加 (issue 2069)

  • レスポンス・クラスを選択するときにレスポンス `` body``を使用します (issue 2001, 修正 issue 2000)

  • 間違ったnetlocでURLを正規化することに失敗しないでください (issue 2038, 修正 issue 2010)

  • HttpCompressionMiddleware (と SitemapSpider) で小修正:

  • IPアドレスホストに対して証明書を検証するときに例外をキャッチ(および警告付きで無視) (issue 2094, 修正 issue 2092)

  • カスタマイズのためのレガシー・クラス属性の使用に関して、 FilesPipelineImagesPipeline の下位互換性を再度作成します (issue 1989, 修正 issue 1985)

新機能

  • プロジェクト・フォルダの外で genspider を有効にする (issue 2052)

  • HTTPS CONNECT TunnelError をデフォルトで再試行 (issue 1974)

文書

  • 辞書式順序での FEED_TEMPDIR 設定 (commit 9b3c72c)

  • 概要で慣用的な .extract_first() を使用 (issue 1994)

  • 著作権表示年を更新 (commit c2c8036)

  • エラーバックに関する情報と例を追加 (issue 1995)

  • ダウンローダー・ミドルウェアの例で "url" 変数使用 (issue 2015)

  • 文法修正 (issue 2054, issue 2120)

  • スパイダー・コールバックでのBeautifulSoupの使用に関する新しいFAQ項目 (issue 2048)

  • ScrapyがPython3を搭載したWindowsで機能しないことに関する注記を追加 (issue 2060)

  • プル・リクエストで完全なタイトルを使う事を奨励する (issue 2026)

テスト

  • Travis CI と Pin pytest-cov py.test要件を2.2.1にアップグレードします (issue 2095)

Scrapy 1.1.0 (2016-05-11)

この1.1リリースには、多くの興味深い機能とバグ修正が含まれています:

  • Scrapy1.1はPython3のベータサポートがあります( Twisted >= 15.5 が必要です)。 詳細といくつかの制限については、 Python 3 のベータ・サポート を参照してください。

  • ホットな新機能:

    • Item loaderは今や入れ子になったローダーをサポートします (issue 1467)

    • FormRequest.from_response が改良されました (issue 1382, issue 1137)

    • 設定 AUTOTHROTTLE_TARGET_CONCURRENCY を追加し AutoThrottle 文書を改善しました (issue 1324)

    • 本文をunicodeとして取得するために response.text を追加しました (issue 1730)

    • アノニマス S3 接続 (issue 1358)

    • ダウンローダー・ミドルウェアでのDeferreds (issue 1473) 。 これにより robots.txt 処理が向上します (issue 1471)

    • HTTPキャッシュ処理は今やRFC2616に厳密に従います。そして設定 HTTPCACHE_ALWAYS_STOREHTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLS が追加されました (issue 1151)

    • セレクターは parsel ライブラリに抽出されました (issue 1409) 。 つまり、ScrapyなしでScrapyセレクターを使用でき、Scrapyをアップグレードせずにセレクター・エンジンをアップグレードすることもできます。

    • HTTPSダウンローダーは、TLS 1.0を強制する代わりに、デフォルトでTLSプロトコル・ネゴシエーションを実行するようになりました。 あなたは 新しい DOWNLOADER_CLIENT_TLS_METHOD を使用してSSL/TLSメソッドを設定することもできます。

  • 以下のバグ修正には注意が必要な場合があります:

    • デフォルトでは、不正なリクエスト(HTTP 400)を再試行しないでください (issue 1289) 。 古い動作が必要な場合は、 400 「400」を RETRY_HTTP_CODES にセットしてください。

    • シェル・ファイルの引数処理を修正しました (issue 1710, issue 1550) 。 scrapy shell index.html を実行しようとすると、URL URL http://index.html ロードしようとします。ローカル・ファイルをロードするには、 scrapy shell ./index.html を使用してください。

    • Robots.txtコンプライアンスは、新しく作成されたプロジェクトに対してデフォルトで有効になりました (issue 1724) 。 Scrapyは、robots.txtがダウンロードされるのを待ってから、クロールを続行します (issue 1735) 。この動作を無効にする場合は、新しいプロジェクトを作成した後、 settings.py ファイルの ROBOTSTXT_OBEY を更新します。

    • エクスポータは、デフォルトでbyteではなくunicodeで動作するようになりました (issue 1080) 。 PythonItemExporter を使用する場合は、コードを更新して、現在非推奨となっているバイナリモードを無効にすることをお勧めします。

    • ドットを含むXMLノード名を有効なものとして受け入れます (issue 1533)

    • (FilesPipeline または ImagesPipeline を使用して)ファイルまたは画像をS3にアップロードする場合、デフォルトのACLポリシーが "public" ではなく "private" になりました。 警告:後方互換性がありません! FILES_STORE_S3_ACL を使用して変更できます。

    • 特に非ASCII文字を含むURLの場合、より正確な出力のために canonicalize_url() を再実装しました (issue 1947) 。これにより、以前のScrapyバージョンと比較してリンク抽出器の出力が変更される可能性があります。 これにより、1.1より前の実行でまだ保持されている可能性のある一部のキャッシュ・エントリが無効になる場合もあります。 警告:後方互換性がありません!

その他の改善点とバグ修正の詳細については、以下を読み進めてください。

Python 3 のベータ・サポート

私たちはScrapyをPython3で実行するために懸命に取り組んできました( hard at work to make Scrapy run on Python 3 )。 その結果、Python 3.3と3.4と3.5でスパイダーを実行できるようになりました( Twisted >= 15.5 が必要)。一部の機能はまだ欠落しています(一部は移植されない可能性があります)。

ほとんどすべての組み込み拡張機能/ミドルウェアが機能することが期待されています。けれども、我々はPython3ではいくつかの制限があることを認識しています:

  • ScrapyはPython3を搭載したWindowsでは機能しません

  • 電子メール送信はサポートされていません

  • FTPダウンロード処理はサポートされていません

  • Telnetコンソールはサポートされていません

追加の新機能と拡張機能

  • Scrapyにコーディング規範 ( Code of Conduct ) が追加されました (issue 1681)

  • コマンドライン・ツールでzsh補完できるようになりました (issue 934)

  • scrapy shell の改良:

    • bpythonをサポートし、 SCRAPY_PYTHON_SHELL を介して優先Pythonシェルを構成します (issue 1100, issue 1444)

    • スキーム無しのURLをサポート (issue 1498) 警告: 後方互換性がありません!

    • 相対ファイル・パスのサポートを復活させます (issue 1710, issue 1550)

  • デフォルトのチェック間隔を変更するために MEMUSAGE_CHECK_INTERVAL_SECONDS 設定を追加 (issue 1282)

  • ダウンロード・ハンドラーは、スキームを使用して最初のリクエストで遅延読み込みされるようになりました (issue 1390, issue 1421)

  • HTTPSダウンロード・ハンドラーはTLS1.0を強制しなくなりました。 代わりに、OpenSSLの SSLv23_method()/TLS_method() が使用され、リモート・ホストと可能な限り最高のTLSプロトコル・バージョンのネゴシエーションを試みることができます (issue 1794, issue 1629)

  • RedirectMiddleware は、スパイダー属性または Requestmeta キーの handle_httpstatus_list からステータス・コードをスキップするようになりました (issue 1334, issue 1364, issue 1447)

  • フォームの送信:

    • <button> 要素でも機能するようになりました (issue 1469)

    • 空の文字列が値のない送信ボタンに使用されるようになりました (issue 1472)

  • 辞書風な設定には、キーごとの優先順位があります (issue 1135issue 1149issue 1586)

  • 非ASCII電子メール送信 (issue 1662)

  • 関連する設定が設定されていない場合、 CloseSpiderSpiderState 拡張機能が無効になるようになりました (issue 1723, issue 1725)

  • ExecutionEngine.close メソッド追加 (issue 1423)

  • CrawlerRunner.create_crawler メソッド追加 (issue 1528)

  • スケジューラの優先度キューは、 SCHEDULER_PRIORITY_QUEUE を介してカスタマイズできるようになりました (issue 1822)

  • リンク抽出器で .pps リンクがデフォルトで無視されるようになりました (issue 1835)

  • FTPおよびS3フィード・ストレージの一時データ・フォルダーは、新しい FEED_TEMPDIR 設定を使用してカスタマイズできます (issue 1847)

  • FilesPipelineImagesPipeline の設定がクラス属性ではなくインスタンス属性になり、スパイダー固有の動作が可能になりました (issue 1891)

  • JsonItemExporter は、開始と終了の角括弧(square bracket)を独自の行(出力ファイルの最初と最後の行)でフォーマットするようになりました (issue 1950)

  • 利用可能な場合、 botocoreS3FeedStorageS3DownloadHandlerS3FilesStore に使用されます (issue 1761, issue 1883)

  • 大量の文書の更新と関連する修正 (issue 1291, issue 1302, issue 1335, issue 1683, issue 1660, issue 1642, issue 1721, issue 1727, issue 1879)

  • その他のリファクタリングと最適化と整理 (issue 1476, issue 1481, issue 1477, issue 1315, issue 1290, issue 1750, issue 1881)

非推奨と削除

  • to_bytesto_unicode を追加し、str_to_unicodeunicode_to_str 関数を非推奨にした (issue 778)

  • isbinarytext の使用を置き換えるために、 binary_is_text が導入されました(ただし、逆の戻り値で) (issue 1851)

  • optional_features セットは削除されました (issue 1359)

  • --lsprof コマンドライン・オプションが削除されました (issue 1689) 。 警告:後方互換性はありません。 しかし、ユーザー・コードを壊すことはありません。

  • 以下のデータ型は非推奨です (issue 1720):

    • scrapy.utils.datatypes.MultiValueDictKeyError

    • scrapy.utils.datatypes.MultiValueDict

    • scrapy.utils.datatypes.SiteNode

  • 以前にバンドルされていた scrapy.xlib.pydispatch ライブラリは非推奨になり、 pydispatcher に置き換えられました。

再配置

バグ修正

  • Scrapyは、 HTTP 400 Bad Request レスポンスを受け取ったリクエストを再試行しなくなりました (issue 1289) 。 警告:後方互換性がありません!

  • http_proxy configの空のパスワードをサポート (issue 1274)

  • application/x-jsonTextResponse として解釈します (issue 1333)

  • 複数の値を持つlink rel属性をサポート (issue 1201)

  • <base> タグがある場合の scrapy.http.FormRequest.from_response を修正 (issue 1564)

  • TEMPLATES_DIR 処理修正 (issue 1575)

  • FormRequest に関する様々な修正 (issue 1595, issue 1596, issue 1597)

  • _monkeypatches をより堅牢にします (issue 1634)

  • アイテムに文字列以外のフィールドがある XMLItemExporter のバグを修正しました (issue 1738)

  • macOSでのstartprojectコマンドの修正 (issue 1635)

  • 文字列以外のアイテム型の PythonItemExporter とCSVExporterを修正しました (issue 1737)

  • ロギング関係の様々な修正 (issue 1294, issue 1419, issue 1263, issue 1624, issue 1654, issue 1722, issue 1726 and issue 1303)

  • utils.template.render_templatefile() 内のバグを修正 (issue 1212)

  • robots.txt からのサイト・マップの抽出では、大文字と小文字が区別されなくなりました (issue 1902)

  • 同じリモート・ホストに複数のプロキシを使用すると、HTTPS+CONNECTトンネルが混同される可能性があります (issue 1912)

Scrapy 1.0.7 (2017-03-03)

  • パッケージの修正:setup.pyでサポートされていないTwistedバージョンを禁止します。

Scrapy 1.0.6 (2016-05-04)

  • 修正: RetryMiddlewareは、非標準のHTTPステータ・スコードに対して堅牢になりました (issue 1857)

  • 修正: ファイル・ストレージHTTPキャッシュが間違った変更時刻をチェックしていた (issue 1875)

  • 文書: Sphinx 1.4以降のサポート (issue 1893)

  • 文書: セレクターの例の一貫性 (issue 1869)

Scrapy 1.0.5 (2016-02-04)

  • 修正: [バックポート] LinkExtractorsの偽のリンクを無視 (修正 issue 907, commit 108195e)

  • テスト: 'pytest' を使用するようにbuildbot makefileを変更 (commit 1f3d90a)

  • 文書: チュートリアルとメディア・パイプラインのタイプミスを修正 (commit 808a9eacommit 803bd87)

  • 文書: 設定の文書のDOWNLOADER_MIDDLEWARES_BASEにAjaxCrawlMiddlewareを追加 (commit aa94121)

Scrapy 1.0.4 (2015-12-30)

  • Twistedバージョンに応じて、 xlib/tx フォルダーを無視します (commit 7dfa979)

  • 新しいtravis-ciインフラで実行 (commit 6e42f0b)

  • スペル修正 (commit 823a1cc)

  • xmliter正規表現のノード名をエスケープします (commit da3c155)

  • ドットありのxmlノード名をテスト (commit 4418fc3)

  • テスト: テストで、壊れているバージョンのPillowを使用禁止 (commit a55078c)

  • log on versionコマンドを無効にする。 closes #1426 (commit 86fc330)

  • log on startproject コマンド無効 (commit db4c9fe)

  • PyPIダウンロード統計バッジを追加 (commit df2b944)

  • PRが scrapy/scrapyブランチから作成されている場合は、Travisでテストを2回実行しないでください (commit a83ab41)

  • Python 3移植ステータス・バッジをREADMEに追加 (commit 73ac80d)

  • RFPDupeFilterの永続性を修正 (commit 97d080e)

  • テスト: dupefilterの永続性が機能していないことを示すテスト (commit 97f2fb3)

  • file:// スキーム・ハンドラーの明示的なファイル・クローズ (commit d9b4850)

  • シェルでdupefilterを無効にします (commit c0d0734)

  • 文書: サイドバーに表示されるtoctreeにキャプションを追加 (commit aa239ad)

  • 文書: pywin32はすでに依存関係として宣言されているため、インストール手順から削除しました。 (commit 10eb400)

  • Conda for Windowsおよびその他のOSの使用に関するインストール注記を追加 (commit 1c3600a)

  • 些細な文法の問題を修正 (commit 7f4ddd5)

  • 文書のタイプミスを修正 (commit b71f677)

  • 今やバージョン1が存在します (commit 5456c0e)

  • もう一つの無効なxpathエラーを修正 (commit 0a1366e)

  • ValueErrorを修正: 無効なXPath: selectors.rstの //div/[id="not-exists"]/text() (commit ca8d60f)

  • タイプミス修正 (commit 7067117)

  • downloader-middleware.rst と exceptions.rst 内のタイプミス修正。middlware → middleware (commit 32f115c)

  • Debianの互換性に関するメモをUbuntuインストール節に追加 (commit 23fda69)

  • macOSインストール代替回避策をvirtualenvに置き換え (commit 98b63ee)

  • インストール手順については、Homebrewのホームページを参照 (commit 1925db1)

  • サポートされている最も古いtoxバージョンを寄稿文書に追加 (commit 5d10d6d)

  • 注意: すでに python>=2.7.9 に含まれているpipに関するインストール文書に注意してください (commit 85c980e)

  • 文書のUbuntuインストール節にPython以外の依存関係を追加 (commit fbd010d)

  • 文書にmacOSインストール節追加 (commit d8f4cba)

  • 文書(ENH): rtdテーマへのパスを明示的に指定 (commit de73b1a)

  • 些細な修正: scrapy.Spider 文書の文法 (commit 1ddcc7b)

  • 一般的な慣行のサンプル・コードをコメントと一致させます (commit 1b85bcf)

  • nextcall反復呼び出し(heartbeats) (commit 55f7104)

  • Twisted 15.4.0 とバックポート修正の互換性 (commit b262411)

  • pin pytest to 2.7.3 (commit a6535c2)

  • mgedmin/patch-1からのプル・リクエスト #1512 をマージします (commit 8876111)

  • mgedmin/patch-2からのプル・リクエスト #1513 をマージします (commit 5d4daf8)

  • タイプミス (commit f8d0682)

  • リスト・フォーマットの修正 (commit 5f83a93)

  • queuelibに最近変更を加えた後のScrapyスキュー・テストを修正 (commit 3365c01)

  • rweindl/patch-1からのプル・リクエスト #1475 をマージします (commit 2d688cd)

  • tutorial.rstを更新 (commit fbc1f25)

  • rhoekman/patch-1からのプル・リクエスト #1449 をマージします (commit 7d6538c)

  • 文法的小変更 (commit 8752294)

  • versionコマンドにopensslバージョンを追加 (commit 13c45ac)

Scrapy 1.0.3 (2015-08-11)

Scrapy 1.0.2 (2015-08-06)

Scrapy 1.0.1 (2015-07-01)

  • FTPClientに渡す前にリクエスト・パスをunquoteします。すでにパスはエスケープされています (commit cc00ad2)

  • MANIFEST.in にテスト/ソース配布を含める (commit eca227e)

  • 文書: SelectJmes文書修正 (commit b8567bc)

  • 文書: UbuntuとArchlinuxをWindowsサブセクションの外に持ってくる (commit 392233f)

  • 文書: Ubuntuパッケージからバージョン・サフィックスを削除 (commit 5303c66)

  • 文書: 1.0のリリース日を更新 (commit c89fa29)

Scrapy 1.0.0 (2015-06-19)

このメジャーリリースには、多くの新機能とバグ修正が含まれています。 更新された overview を確認して、磨かれた チュートリアル とともに変更の一部を確認してください。

スパイダーで辞書を返すためのサポート

スパイダーからスクレイピングされたデータを収集するために、スクレイピーアイテムを宣言して返す必要はなくなりました。代わりに、明示的な辞書を返すことができるようになりました。

化石版

class MyItem(scrapy.Item):
    url = scrapy.Field()

class MySpider(scrapy.Spider):
    def parse(self, response):
        return MyItem(url=response.url)

新版

class MySpider(scrapy.Spider):
    def parse(self, response):
        return {'url': response.url}

スパイダー毎の設定 (GSoC 2014)

前回のGoogle Summer of Code プロジェクトでは、設定の入力に使用されるメカニズムの重要な再設計が完了し、特定の設定を上書きする明示的な優先順位が導入されました。その目標の延長として、単一のスパイダー専用に機能する設定に新しいレベルの優先度を含め、プロジェクト設定を再定義できるようにしました。

あなたのスパイダーで custom_settings クラス変数を定義して使用を開始します:

class MySpider(scrapy.Spider):
    custom_settings = {
        "DOWNLOAD_DELAY": 5.0,
        "RETRY_ENABLED": False,
    }

設定の作成について詳しくは、 設定 をご覧ください

Pythonロギング

Scrapy 1.0は、Twistedロギングから離れ、デフォルトのロギング・システムとしてPython組み込みのものをサポートするようになりました。 ロギング関数を呼び出すための古いカスタム・インターフェースのほとんどについて下位互換性を維持していますが、PythonロギングAPIに完全に切り替えるように警告が表示されます。

旧版

from scrapy import log
log.msg('MESSAGE', log.INFO)

新版

import logging
logging.info('MESSAGE')

スパイダーを使用したロギングは変わりませんが、 log() メソッドに加えて、スパイダーがログ・イベントを発行するために作成されたカスタム logger にアクセスできます:

class MySpider(scrapy.Spider):
    def parse(self, response):
        self.logger.info('Response received')

詳細については、ロギング文書をご覧ください: ロギング(logging)

クローラーAPIリファクタリング (GSoC 2014)

前回のGoogle Summer of Codeのもう1つのマイル・ストーンは、内部APIのリファクタリングであり、よりシンプルで簡単な使用法を模索していました。 コアAPI で新しいコア・インターフェースを確認してください。

これらの変更に直面する一般的な状況は、スクリプトからScrapyを実行しているときです。 新しいAPIを使用してSpiderを手動で実行する方法の簡単な例を以下に示します:

from scrapy.crawler import CrawlerProcess

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(MySpider)
process.start()

この機能はまだ開発中であり、安定した状態に達するまではAPIが変更される可能性があることに注意してください。

Scrapyを実行するスクリプトの例をもっと見る: よくある例

モジュールの再配置

Scrapyの一般的な構造の改善を試み、モジュールが大幅に再配置されました。主な変更点は、さまざまなサブ・パッケージを新しいプロジェクトに分割し、 scrapy.contribscrapy.contrib_exp の両方をトップ・レベルのパッケージに分解することでした。非推奨のモジュールをインポートすると、新しい場所を示す警告が表示されるため、内部再配置間で下位互換性が維持されています。

再配置全リスト

括り出されたパッケージ

注釈

これらの拡張機能には、いくつかの小さな変更が加えられました。一例として、一部の設定名が変更されました。新しい使用法を理解するには、新しい各リポジトリの文書を確認してください。

古い場所

新しい場所

scrapy.commands.deploy

scrapyd-client (他の選択肢はこちら: スパイダーのデプロイ)

scrapy.contrib.djangoitem

scrapy-djangoitem

scrapy.webservice

scrapy-jsonrpc

scrapy.contrib_expscrapy.contrib を廃止

古い場所

新しい場所

scrapy.contrib_exp.downloadermiddleware.decompression

scrapy.downloadermiddlewares.decompression

scrapy.contrib_exp.iterators

scrapy.utils.iterators

scrapy.contrib.downloadermiddleware

scrapy.downloadermiddlewares

scrapy.contrib.exporter

scrapy.exporters

scrapy.contrib.linkextractors

scrapy.linkextractors

scrapy.contrib.loader

scrapy.loader

scrapy.contrib.loader.processor

scrapy.loader.processors

scrapy.contrib.pipeline

scrapy.pipelines

scrapy.contrib.spidermiddleware

scrapy.spidermiddlewares

scrapy.contrib.spiders

scrapy.spiders

  • scrapy.contrib.closespider

  • scrapy.contrib.corestats

  • scrapy.contrib.debug

  • scrapy.contrib.feedexport

  • scrapy.contrib.httpcache

  • scrapy.contrib.logstats

  • scrapy.contrib.memdebug

  • scrapy.contrib.memusage

  • scrapy.contrib.spiderstate

  • scrapy.contrib.statsmailer

  • scrapy.contrib.throttle

scrapy.extensions.*

複数形の名前変更とモジュールの統合

古い場所

新しい場所

scrapy.command

scrapy.commands

scrapy.dupefilter

scrapy.dupefilters

scrapy.linkextractor

scrapy.linkextractors

scrapy.spider

scrapy.spiders

scrapy.squeue

scrapy.squeues

scrapy.statscol

scrapy.statscollectors

scrapy.utils.decorator

scrapy.utils.decorators

クラス名変更

古い場所

新しい場所

scrapy.spidermanager.SpiderManager

scrapy.spiderloader.SpiderLoader

Settings renames

古い場所

新しい場所

SPIDER_MANAGER_CLASS

SPIDER_LOADER_CLASS

変更ログ

新機能と拡張

非推奨と削除

  • htmlparserリンク抽出器を非推奨とする (issue 1205)

  • FeedExporterから非推奨コードを削除 (issue 1155)

  • leftover for.15 互換性 (issue 925)

  • CONCURRENT_REQUESTS_PER_SPIDERサポートの終了 (issue 895)

  • 古いエンジン・コードを削除 (issue 911)

  • SgmlLinkExtractor を非推奨とする (issue 777)

再配置

  • exporters/__init__.py を exporters.py へ移動 (issue 1242)

  • 基底クラス群をそれぞれのパッケージへ移動 (issue 1218, issue 1233)

  • モジュール再配置 (issue 1181, issue 1210)

  • SpiderManager から SpiderLoader へ名前変更 (issue 1166)

  • djangoitem 削除 (issue 1177)

  • scrapy deploy コマンド削除 (issue 1102)

  • contrib_exp 利用解消 (issue 1134)

  • ルート・フォルダーからbinフォルダー削除。修正: #913 (issue 914)

  • jsonrpcベースのwebservice削除 (issue 859)

  • テスト・ケースをプロジェクト・ルート・ディレクトリの下に移動 (issue 827, issue 841)

  • 設定内の再配置されたパスの後方非互換性を修正 (issue 1267)

文書

バグ修正

  • アイテムの他重継承修正 (issue 353, issue 1228)

  • ItemLoader.load_item: フィールド達のコピーを反復処理します (issue 722)

  • Deferredの未処理エラーを修正(RobotsTxtMiddleware) (issue 1131, issue 1197)

  • DOWNLOAD_TIMEOUTをintとして強制的に読み取る (issue 954)

  • scary.utils.misc.load_objectは完全なトレース・バックを出力する必要があります (issue 902)

  • ".local" ホスト・ネームのバグを修正 (issue 878)

  • 有効な拡張機能、ミドルウェア、パイプライン情報が印刷されなくなった問題の修正 (issue 879)

  • metaでfalseに設定された場合のdont_merge_cookiesの不正な動作を修正 (issue 846)

進行中のPython3サポート

  • twisted.conchが利用できない場合はscrapy.telnetを無効にします (issue 1161)

  • ajaxcrawl.pyのPython3構文エラーを修正 (issue 1162)

  • urllibのpython3互換性を高める変更 (issue 1121)

  • assertItemsEqualは、Python 3でassertCountEqualに名前が変更されました。 (issue 1070)

  • 存在すればunittest.mockをインポートします (issue 1066)

  • 非推奨のcgi.parse_qslを更新して、6つのparse_qslを使用するようにしました (issue 909)

  • Python3対応移植のデグレを防ぐ (issue 830)

  • PY3:Python 3にMutableMappingを使用 (issue 810)

  • PY3: six.BytesIO と six.moves.cStringIO を使用 (issue 803)

  • PY3: fix xmlrpclib と email のインポートを修正 (issue 801)

  • PY3: robotparser と urlparse に six を使用します (issue 800)

  • PY3: six.iterkeys と six.iteritems と tempfile を使用 (issue 799)

  • PY3: has_keyの修正とsix.moves.configparserの使用 (issue 798)

  • PY3: six.moves.cPickle の使用 (issue 797)

  • PY3: Python3でいくつかのテストを実行できるようにします (issue 776)

テスト

  • py3-ignoresから不要行を削除 (issue 1243)

  • テストの収集中のpytestからの残りの警告を修正しました (issue 1206)

  • travisでビルドの文書を追加 (issue 1234)

  • テスト: 非推奨のモジュールからテストを収集しないでください。 (issue 1165)

  • 警告を防ぐためにテストにservice_identityパッケージをインストール (issue 1168)

  • テストで非推奨の設定APIを修正しました (issue 1152)

  • POSTメソッドを使用し、ボディが指定されていないWebクライアントのテストを追加 (issue 1089)

  • py3-ignores.txtでコメントをサポート (issue 1044)

  • 一部のアサートを最新化する (issue 835)

  • selector.__repr__ テスト (issue 779)

コードのリファクタリング

  • CSVFeedSpiderの整理: iterate_spider_outputを使用 (issue 1079)

  • 不要なチェックをscrapy.utils.spider.iter_spider_outputから削除 (issue 1078)

  • Pydispatch pep8 (issue 992)

  • walk_modules()から未使用の 'load=False' パラメーターを削除しました (issue 871)

  • 一貫性を保つために、 SpiderState 拡張機能で job_dir ヘルパーを使用してください。 (issue 805)

  • "sflo" ローカル変数の名前を、分かりやすい "log_observer" に変更します (issue 775)

Scrapy 0.24.6 (2015-04-20)

  • Python2の下でunicode_escapeを使用して無効なxpathをエンコード (commit 07cb3e5)

  • IPythonシェル・スコープの問題を修正し、IPythonユーザー構成をロード (commit 2c8e573)

  • 文書の些細なタイプミスを修正 (commit d694019)

  • 些細なタイプミスを修正 (commit f92fa83)

  • データの抽出で、 sel.xpath() 呼び出しを response.xpath() に変換 (commit c2c6d15)

Scrapy 0.24.5 (2015-02-25)

  • Twisted 15.0.0の新しい _getEndpoint エージェント・シグネチャをサポート (commit 540b9bc)

  • 文書: さらにいくつかの参照が修正されました (commit b4c454b)

  • 文書: 参照を修正 (commit e3c1260)

  • t.i.b.ThreadedResolver は今や新スタイルのクラス (commit 9e13f42)

  • S3DownloadHandler: 引用符で囲まれた パス/クエリ・パラメータ を含むリクエストの認証を修正 (commit cdb9a0b)

  • mailsenderに関する文書の変数タイプを修正 (commit bb3a848)

  • item_countの代わりにitems_scrapedをリセットします (commit edb07a4)

  • 投稿のためにどの文書を読むべきかについての暫定的な注意メッセージ (commit 7ee6f7a)

  • mitmproxy 0.10.1 には netlib 0.10.1 も必要です (commit 874fcdd)

  • mitmproxy 0.10.1 を >0.11 として固定すると、テストでは機能しません (commit c6b21f0)

  • 外部URLに対してではなく、ローカルで解析コマンドをテストします (commit c3a6628)

  • HTTPDownloadHandlerで接続プールを閉じる際のTwistedの問題にパッチを適用 (commit d0bf957)

  • 動的アイテム・クラスに関する文書を更新 (commit eeb589a)

  • Lazar-T/patch-3 からのプル・リクエスト #943 をマージ (commit 5fdab02)

  • タイプミス (commit b0ae199)

  • Twistedにはpywin32が必要です。 #937 を閉じます (commit 5cb0cfb)

  • install.rst 更新 (commit 781286b)

  • Lazar-T/patch-1 からのプル・リクエスト #928 をマージ (commit b415d04)

  • ピリオド(fullstop)の代わりにコンマ(comma) (commit 627b9ba)

  • jsma/patch-1 からのプル・リクエスト #885 をマージ (commit de909ad)

  • request-response.rst を更新 (commit 3f3263d)

  • SgmlLinkExtractor - Unicodeが存在する <area> タグを解析するための修正 (commit 49b40f0)

Scrapy 0.24.4 (2014-08-09)

  • pemファイルはmockserverによって使用され、scrapyベンチによって必要とされます (commit 5eddc68)

  • scrapyベンチには scrapy.tests* が必要です (commit d6cb999)

Scrapy 0.24.3 (2014-08-09)

  • 0.24のpy3でtravis-ci時間を無駄にする必要はありません (commit 8e080c1)

  • インストールの文書を更新 (commit 1d0c096)

  • Scrapyフレームワーク用のtrove classifierがあります! (commit 4c701d7)

  • w3libバージョンが言及されている他の場所を更新します (commit d109c13)

  • w3lib要件を1.8.0に更新します (commit 39d2ce5)

  • w3lib.html.replace_entities() を使って下さい (remove_entities() は非推奨になりました) (commit 180d3ad)

  • set zip_safe=False (commit a51ee8b)

  • テストパッケージを出荷しない (commit ee3b371)

  • sparky.batはもう必要ありません (commit c3861cf)

  • setup.pyを最新化する (commit 362e322)

  • ヘッダーは文字列以外の値を処理できません (commit 94a5c65)

  • ftpテスト・ケースを修正 (commit a274a7f)

  • travis-ciビルドは完了するのに合計50分ほどかかります (commit ae1e2cc)

  • shell.rstのタイプミスを更新 (commit e49c96a)

  • シェルの結果の奇妙なインデントを削除 (commit 1ca489d)

  • 説明の改善、ソースとしてのブログ投稿の明確化、仕様にXPath文字列関数へのリンクの追加 (commit 65c8f05)

  • UserTimeoutError と ServerTimeouterror の名前変更 #583 (commit 037f6ab)

  • セレクターの文書にいくつかのxpathのヒントを追加 (commit 2d103e0)

  • https://github.com/scrapy/w3lib/pull/23 のためのアカウントのテストを修正 (commit f8d366a)

  • get_func_args最大再帰修正 #728 (commit 81344ea)

  • #560 に従って入出力プロセッサの例を更新 (commit f7c4ea8)

  • チュートリアルのPython文法を修正 (commit db59ed9)

  • トンネリング・プロキシー(tunneling proxy)のテスト・ケースを追加 (commit f090260)

  • トンネリングを使用しているときにプロキシ認証ヘッダーをリモート・ホストにリークするバグを修正 (commit d8793af)

  • MIMEタイプが "application/xml" のXHTMLドキュメントからリンクを抽出 (commit ed1f376)

  • roysc/patch-1からのプル・リクエスト #793 をマージ (commit 91a1106)

  • commands.rst内のタイプミスを修正 (commit 743e1e2)

  • settings.overrides.setdefaultのより良いテスト・ケース (commit e22daaf)

  • http 1.1の定義に従ってCRLFをライン・マーカーとして使用する (commit 5ec430b)

Scrapy 0.24.2 (2014-07-08)

  • 非推奨のsettings.overridesおよびsettings.defaults属性をプロキシーするために可変マッピングを使用します (commit e5e8133)

  • python3はまだサポートされていません (commit 3cd6146)

  • Python互換バージョンセットをDebianパッケージに更新します (commit fa5d76b)

  • 文書: リリース・ノートの書式を修正 (commit c6a9e20)

Scrapy 0.24.1 (2014-06-27)

  • 非推奨のCrawlerSettingsを修正し、.defaults属性との下位互換性を高めます (commit 8e3f20a)

Scrapy 0.24.0 (2014-06-26)

機能強化

  • Scrapyのトップレベルの名前空間改善 (issue 494, issue 684)

  • レスポンスにセレクター・ショートカットを追加 (issue 554, issue 690)

  • 新しいlxmlベースのLinkExtractorを追加して、メンテナンスされていないSgmlLinkExtractorを置き換えます (issue 559, issue 761, issue 763)

  • 設定APIの整理: スパイダー毎の設定の一部 GSoC プロジェクト (issue 737)

  • テンプレートにUTF8エンコーディング・ヘッダーを追加 (issue 688, issue 762)

  • Telnetコンソールはデフォルトで127.0.0.1にバインドするようになりました (issue 699)

  • Debian/Ubuntuのインストール手順を更新 (issue 509, issue 549)

  • lxml XPath評価でスマート文字列を無効にする (issue 535)

  • ファイルシステム・ベースのキャッシュをhttpキャッシュ・ミドルウェアのデフォルトとして復元 (issue 541, issue 500, issue 571)

  • Scrapyシェルで現在のクローラーを公開 (issue 557)

  • CSVとXMLエクスポーターを比較するテスト・スイートを改善 (issue 570)

  • offsite/filtered 統計と、新 offsite/domains 統計 (issue 566)

  • CrawlSpiderのジェネレーターとしてprocess_linksをサポート (issue 555)

  • DupeFilterの詳細ログと新しい統計カウンター (issue 553)

  • MailSender.send() に mimetype パラメーターを追加 (issue 602)

  • ファイル・パイプライン・ログ・メッセージを一般化 (issue 622)

  • エンコードできないコード・ポイントをSGMLLinkExtractorのhtmlエンティティに置き換え (issue 565)

  • SEP文書をrst書式に変換 (issue 629, issue 630, issue 638, issue 632, issue 636, issue 640, issue 635, issue 634, issue 639, issue 637, issue 631, issue 633, issue 641, issue 642)

  • FormRequestのclickdataのnrインデックスのテストと文書化 (issue 646, issue 645)

  • 他のコンポーネントと同様にダウンローダー・ハンドラーを無効にできるようにします (issue 650)

  • リダイレクトが多すぎるためにリクエストが破棄されたときにログに記録する (issue 654)

  • スパイダー・コールバックによって処理されない場合は、エラー・レスポンスをログに記録 (issue 612, issue 656)

  • コンテンツ・タイプ・チェックをhttp圧縮mwに追加 (issue 193, issue 660)

  • ppaの最新のpypiを使用してpypyテストを実行します (issue 674)

  • trialの代わりにpytestを使用してテスト・スイートを実行します (issue 679)

  • 文書をビルドし、tox環境でリンク切れをチェック (issue 687)

  • scarp.version_infoを整数のタプルにします (issue 681, issue 692)

  • ファイル名拡張子からエクスポーターの出力形式を推測 (issue 546, issue 659, issue 760)

  • url_is_from_any_domain() で大文字と小文字を区別しないドメインをサポート (issue 693)

  • プロジェクトおよびスパイダー・テンプレートのpep8警告を削除 (issue 698)

  • request_fingerprint 関数のテストと文書化 (issue 597)

  • GSoCプロジェクトの per-spider settings (スパイダーごとの設定) のSEP-19を更新 (issue 705)

  • 規約が失敗した場合、終了コードをゼロ以外に設定 (issue 727)

  • ダウンロード・コンポーネントとしてインスタンス化されるクラスを制御する設定を追加 (issue 738)

  • item_dropped シグナルでレスポンスを渡します (issue 724)

  • scrapy check 規約(contract)コマンドを改善 (issue 733, issue 752)

  • spider.closed() ショートカットの文書化 (issue 719)

  • request_scheduled シグナルの文書化 (issue 746)

  • セキュリティ問題を報告するときの注記を追加 (issue 697)

  • evelDB httpキャッシュ・ストレージ・バックエンドを追加 (issue 626, issue 500)

  • scrapy list コマンドのスパイダー・リスト出力をソート (issue 742)

  • 複数の文書の拡張強化と修正 (issue 575, issue 587, issue 590, issue 596, issue 610, issue 617, issue 618, issue 627, issue 613, issue 643, issue 654, issue 675, issue 663, issue 711, issue 714)

バグ修正

  • RegexLinkExtractorでリンクを作成するときにunicode URL値をエンコード (issue 561)

  • ItemLoaderプロセッサのNone値を無視 (issue 556)

  • SGMLLinkExtractorとHtmlParserLinkExtractorに内部タグがある場合のリンク・テキストを修正 (issue 485, issue 574)

  • 非推奨のクラスのサブクラス化に関する誤ったチェックを修正 (issue 581, issue 584)

  • inspect.stack() の失敗によって引き起こされたエラーを処理 (issue 582)

  • 存在しないエンジン属性への参照を修正 (issue 593, issue 594)

  • type()の動的itemclassの使用例を修正 (issue 603)

  • lucasdemarchi/codespellを使用してタイプミスを修正 (issue 628)

  • SgmlLinkExtractorのattrs引数のデフォルト値がタプルになるように修正 (issue 661)

  • サイトマップ・リーダーのXXEの欠陥を修正 (issue 676)

  • フィルタリングされた開始リクエストをサポートするようにエンジンを修正 (issue 707)

  • ホスト名のないURLのオフサイト・ミドルウェア・ケースを修正 (issue 745)

  • TestsuiteはもうPILを必要としません (issue 585)

Scrapy 0.22.2 (released 2014-02-14)

  • 存在しないengine.slotsへの参照を修正。 #593 をクローズ (commit 13c099a)

  • downloaderMW文書のタイプミス(spiderMW文書をコピった半端物) (commit 8ae11bf)

  • タイプミス修正 (commit 1346037)

Scrapy 0.22.1 (released 2014-02-08)

  • localhost666は特定の状況下で解決できます (commit 2ec2279)

  • inspect.stackの失敗をテスト (commit cc3eda3)

  • inspect.stack() が失敗した場合の処理 (commit 8cb44f9)

  • 非推奨クラスのサブクラス化に関する誤ったチェックを修正。 #581 をクローズ (commit 46d98d6)

  • 文書: 最後のスパイダーの例の4スペース・インデント (commit 13846de)

  • HtmlParserLinkExtractorを修正し、 #485 マージ後にテストします (commit 368a946)

  • BaseSgmlLinkExtractor: リンクに内部タグがある場合に欠落していたスペースを修正 (commit b566388)

  • BaseSgmlLinkExtractor: 内部タグ付きのリンクの単体テストを追加 (commit c1cb418)

  • BaseSgmlLinkExtractor: unknown_endtag() を修正して、終了タグが開始タグと一致する場合にのみ current_link=None を設定するようにしました (commit 7e4d627)

  • Travis-CIビルドのテストを修正 (commit 76c7e20)

  • 暗号化できないコードポイントをhtmlエンティティに置き換えます。修正 #562 と #285 (commit 5f87b17)

  • RegexLinkExtractor: リンクを作成するときにURL unicode値をエンコードします (commit d0ee545)

  • チュートリアルのクロール出力を最新の出力に更新 (commit 8da65de)

  • クローラー参照でシェル関連文書を更新し、実際のシェル出力を修正 (commit 875b9ab)

  • PEP8な些細な編集 (commit f89efaf)

  • Scrapyシェルで現在のクローラーを公開 (commit 5349cec)

  • 未使用のreインポートとPEP8な些細な編集 (commit 387f414)

  • ItemLoaderを使用するときは、Noneの値を無視します (commit 0632546)

  • 文書: デフォルト値のHTTPCACHE_STORAGEのタイプミスを修正しました。これは、Dbmではなくファイルシステムになりました (commit cde9a8c)

  • Ubuntuのセットアップ手順をリテラル・コードとして表示 (commit fb5c9c5)

  • Ubuntuでのインストール手順を更新 (commit 70fb105)

  • stray-leone/patch-1からのプル・リクエスト #550 をマージ (commit 6f70b6a)

  • Scrapy Ubuntuパッケージのバージョンを変更 (commit 725900d)

  • 0.22.0のリリース日を修正 (commit af0219a)

  • news.rstのタイプミスを修正し、(まだリリースされていない)ヘッダーを削除 (commit b7f58f4)

Scrapy 0.22.0 (released 2014-01-17)

機能強化

  • [ 後方互換性なし ] HTTPCacheMiddlewareバックエンドをファイルシステムに切り替えました (issue 541) 。 古いバックエンドを復元するには、 HTTPCACHE_STORAGEscrapy.contrib.httpcache.DbmCacheStorage に設定します

  • CONNECTメソッドを使用して https:// URLをプロキシーします (issue 392, issue 397)

  • googleによって定義されているajaxクロール可能なページをクロールするミドルウェアを追加 (issue 343)

  • scrapy.spider.BaseSpider を scrapy.spider.Spider に名前変更 (issue 510, issue 519)

  • セレクターはデフォルトでEXSLT名前空間を登録します (issue 472)

  • セレクターの名前変更と同様にアイテム・ローダーを統合する (issue 461)

  • RFPDupeFilter クラスを簡単にサブクラス化できるようにします (issue 533)

  • テスト・カバレッジと今後のPython3サポートを改善 (issue 525)

  • 設定とミドルウェアのスタートアップ情報をINFOレベルに出力 (issue 520)

  • get_func_args ユーティリティでパーシャル(partial)をサポート (issue 506, issue:504)

  • toxを介して個々にテストを実行できるようにする (issue 503)

  • リンク抽出器によって無視される拡張機能更新 (issue 498)

  • ファイル/画像/サムネイル のパスを取得するミドルウェア・メソッドを追加 (issue 490)

  • オフサイト・ミドルウェア・テストを改善 (issue 478)

  • RefererMiddlewareによって設定されたデフォルトのRefererヘッダーをスキップする方法を追加 (issue 475)

  • デフォルトの Accept-Encoding ヘッダーで x-gzip を送信しない (issue 469)

  • 設定を使用したhttpエラー処理の定義のサポート (issue 466)

  • レガシーが見つかった場合は常に最新のPythonイディオムを使用してください (issue 497)

  • 文書の改善と修正 (issue 527, issue 524, issue 521, issue 517, issue 512, issue 505, issue 502, issue 489, issue 465, issue 460, issue 425, issue 536)

修正

  • CrawlSpiderテンプレートのセレクター・クラスのインポートを更新 (issue 484)

  • engine.slots への存在しない参照を修正 (issue 464)

  • TextResponse以外のインスタンスで body_as_unicode() を呼び出そうとしないでください (issue 462)

  • XPathItemLoaderをサブクラス化するときに警告します。以前は、インスタンス化についてのみ警告していました。 (issue 523)

  • XPathSelectorをサブクラス化するときに警告します。以前は、インスタンス化についてのみ警告していました。 (issue 537)

  • メモリ統計の複数の修正 (issue 531, issue 530, issue 529)

  • FormRequest.from_response() のURLのオーバーライドを修正 (issue 507)

  • pip 1.5でのテスト・ランナーの修正 (issue 513)

  • スパイダー名がunicodeの場合のログ・エラーを修正 (issue 479)

Scrapy 0.20.2 (released 2013-12-09)

  • セレクターの変更に伴いCrawlSpiderテンプレートを更新 (commit 6d1457d)

  • チュートリアルのメソッド名を修正しました。 GH-480 をクローズ ( commit b4fc359 )

Scrapy 0.20.1 (released 2013-11-28)

  • include_package_dataは、公開されたソースからwheelを構築するために必要です (commit 5ba1ad5)

  • process_parallelは、内部遅延で障害をリークしていました。 #458 をクローズ (commit 419a780)

Scrapy 0.20.0 (released 2013-11-08)

機能強化

  • CSSセレクターを含む新セレクターAPI (issue 395 and issue 426),

  • リクエスト/レスポンスのURL/ボディ属性は不変になりました(それらの変更は長い間非推奨でした)

  • ITEM_PIPELINES が(リストではなく)辞書として定義されるようになりました

  • サイトマップ・スパイダーは代替URLを取得できます (issue 360)

  • Selector.remove_namespaces() は、要素の属性から名前空間を削除するようになりました。 (issue 416)

  • Python 3.3以降への道を開いた (issue 435, issue 436, issue 431, issue 452)

  • ネストをサポートするネイティブPythonの型を使用する新しいアイテム・エクスポーター (issue 366)

  • 設定で定義された同時実行性と一致するようにHTTP1.1プール・サイズを調整します (commit b43b5f575)

  • sparky.mail.MailSenderは、TLS経由で接続するか、STARTTLSを使用してアップグレードできるようになりました (issue 327)

  • ImagesPipelineから機能が除外された新しいFilesPipeline (issue 370, issue 409)

  • 画像処理にはPILではなくPillowをお勧めします (issue 317)

  • Ubuntu QuantalおよびRaring用のDebianパッケージを追加しました (commit 86230c0)

  • モック・サーバー(テストに使用)はHTTPSリクエストをリッスンできます (issue 410)

  • 複数のコア・コンポーネントからマルチ・スパイダー・サポートを削除 (issue 422, issue 421, issue 420, issue 419, issue 423, issue 418)

  • Travis-CIは、 w3libqueuelib のPythonパッケージの開発バージョンに対してScrapyの変更をテストするようになりました。

  • 継続的インテグレーション・テストにpypy2.1を追加 (commit ecfa7431)

  • Pylintedとpep8と、ソースから古いスタイルの例外を削除 (issue 430, issue 432)

  • パラメトリック・インポートにはimportlibを使用します (issue 445)

  • XmlItemExporterに影響するPython2.7.5で導入されたデグレを処理 (issue 372)

  • SIGINTでのクロール・シャットダウンのバグ修正 (issue 450)

  • FormRequest.from_response で reset 型の入力を送信しないでください (commit b326b87)

  • リクエストのerrbackで例外が発生したときにダウンロード・エラーを無視しないでください (commit 684cfc0)

バグ修正

  • Django 1.6でのテストを修正 (commit b6bed44c)

  • HTTP1.1ダウンロード・ハンドラーを使用して切断時にミドルウェアを再試行するための多くのバグ修正

  • Twistedリリース間の不整合を修正 (issue 406)

  • Scrapyシェルのバグを修正 (issue 418, issue 407)

  • setup.pyの不正な変数名を修正 (issue 429)

  • チュートリアルの参照を修正 (issue 387)

  • リクエスト・レスポンス文書群の改善 (issue 391)

  • ベスト・プラクティス文書の改善 (issue 399, issue 400, issue 401, issue 402)

  • django統合ドキュメントを改善 (issue 404)

  • bindaddress リクエスト・メタの文書化 (commit 37c24e01d7)

  • Request クラス文書の改善 (issue 226)

その他

  • Python 2.6のサポートを終了しました (issue 448)

  • インストールの依存関係として cssselect pythonパッケージを追加

  • libxml2とマルチ・セレクターのバックエンド・サポートを削除します。今後は lxml が必要になります。

  • Twistedの最小バージョンが10.0.0に増加し、Twisted8.0のサポートが削除されました。

  • テストスイートを実行するには、 mock Pythonライブラリが必要になります (issue 390)

謝辞

このリリースに貢献してくれたすべての人に感謝します!

コミット数でソートされた貢献者のリスト:

69 Daniel Graña <dangra@...>
37 Pablo Hoffman <pablo@...>
13 Mikhail Korobov <kmike84@...>
 9 Alex Cepoi <alex.cepoi@...>
 9 alexanderlukanin13 <alexander.lukanin.13@...>
 8 Rolando Espinoza La fuente <darkrho@...>
 8 Lukasz Biedrycki <lukasz.biedrycki@...>
 6 Nicolas Ramirez <nramirez.uy@...>
 3 Paul Tremberth <paul.tremberth@...>
 2 Martin Olveyra <molveyra@...>
 2 Stefan <misc@...>
 2 Rolando Espinoza <darkrho@...>
 2 Loren Davie <loren@...>
 2 irgmedeiros <irgmedeiros@...>
 1 Stefan Koch <taikano@...>
 1 Stefan <cct@...>
 1 scraperdragon <dragon@...>
 1 Kumara Tharmalingam <ktharmal@...>
 1 Francesco Piccinno <stack.box@...>
 1 Marcos Campal <duendex@...>
 1 Dragon Dave <dragon@...>
 1 Capi Etheriel <barraponto@...>
 1 cacovsky <amarquesferraz@...>
 1 Berend Iwema <berend@...>

Scrapy 0.18.4 (released 2013-10-10)

  • IPythonは名前空間の更新を拒否します。修正 #396 (commit 3d32c4f)

  • シェルコマンドのリクエストを置き換えるAlreadyCalledErrorを修正しました。 #407 をクローズ (commit b1d8919)

  • start_requestsの怠惰と早期ハングを修正 (commit 89faf52)

Scrapy 0.18.3 (released 2013-10-03)

  • 開始リクエストの遅延評価のデグレを修正 (commit 12693a5)

  • フォーム: リセット入力を送信しない (commit e429f63)

  • ユニット・テストのタイムアウトを増やして、travisの誤検知の失敗を減らします (commit 912202e)

  • jsonエクスポーターのバックポート・マスターの修正 (commit cfc2d46)

  • sdist tarballを生成する前に権限を修正してumaskを設定します (commit 06149e0)

Scrapy 0.18.2 (released 2013-09-03)

  • scrapy check コマンドの修正と後方互換性のあるマルチ・クローラー・プロセスのバックポート (issue 339)

Scrapy 0.18.1 (released 2013-08-27)

  • チェリー・ピックの変更によって追加された余分なインポートを削除 (commit d20304e)

  • twisted pre 11.0.0でのクロール・テストを修正 (commit 1994f38)

  • py26は長さゼロのフィールドをフォーマットできません{} (commit abf756f)

  • バインドされていないレスポンスでPotentiaDataLossエラーをテストします (commit b15470d)

  • content-lengthまたはTransfer-Encodingのないレスポンスを適切なレスポンスとして扱います (commit c4bf324)

  • http11ハンドラーが有効になっていない場合はResponseFailedを含めないでください (commit 6cbe684)

  • 新しいHTTPクライアントは、ResponseFailed例外で失われた接続をラップ(wrap)します。修正 #373 (commit 1a20bba)

  • travis-ciビルド・マトリックスを制限 (commit 3b01bb8)

  • peterarenot/patch-1からのプル・リクエスト #375 をマージ (commit fa766d7)

  • 正しいフォルダを参照するように修正 (commit 3283809)

  • UbuntuリリースをサポートするためにQuantal&Raringを追加 (commit 1411923)

  • http1クライアントへのアップグレード後に特定の接続エラーを再試行しなかった再試行ミドルウェアを修正し、 GH-373をクローズ (commit bb35ed0)

  • Python 2.7.4および2.7.5でXmlItemExporterを修正 (commit de3e451)

  • 0.18リリース・ノートの些細な更新 (commit c45e5f1)

  • 寄稿者リストの形式を修正 (commit 0b60031)

Scrapy 0.18.0 (released 2013-08-09)

  • pypiでテストする方法を含む、Toxを使用したテスト・スイートの実行に対する多くの改善

  • AJAXクロール可能なURLのGETパラメーターを処理 (commit 3fe2a32)

  • lxmlリカバー・オプションを使用してサイトマップをパースします (issue 347)

  • バグ修正: Cookieがnetlocではなくホスト名でマージされる (issue 352)

  • フラグ設定を使用した HttpCompressionMiddleware の無効化をサポート (issue 359)

  • XMLFeedSpideriternodes パーサーを使用してxml名前空間をサポートします (issue 12)

  • dont_cache リクエスト・メタ・フラグをサポート (issue 19)

  • バグ修正: Python 2.7.4の変更により scrapy.utils.gz.gunzip が壊れた (commit 4dc76e)

  • バグ修正: SgmlLinkExtractor のurlエンコード (issue 24)

  • バグ修正: TakeFirst プロセッサは0(ゼロ)値を破棄すべきではありません (issue 59)

  • xmlエクスポーターでネストされたアイテムをサポートする (issue 66)

  • クッキー処理性能の改善 (issue 77)

  • 重複フィルタリングされたリクエストを1回ログだけ記録します (issue 105)

  • リダイレクション・ミドルウェアをステータス・ミドルウェアとメタ・ベース・ミドルウェアに分割 (issue 78)

  • デフォルトのダウンローダー・ハンドラーとしてHTTP1.1を使用します (issue 109issue 318)

  • FormRequest.from_response でのxpathフォーム選択のサポート (issue 185)

  • バグ修正: SgmlLinkExtractor のunicodeデコード・エラー (issue 199)

  • バグ修正: pypiインタープリターでのシグナル・ディスパッチ (issue 205)

  • リクエストの遅延と同時実行処理を改善 (issue 206)

  • RFC2616キャッシュ・ポリシーを HttpCacheMiddleware に追加 (issue 212)

  • エンジンによってログに記録されるメッセージのカスタマイズを許可 (issue 214)

  • DjangoItem の複数の改善 (issue 217, issue 218, issue 221)

  • setuptoolsエントリ・ポイントを使用してScrapyコマンドを拡張します (issue 260)

  • スパイダーの allowed_domains 値の設定/タプルを許可する (issue 261)

  • settings.getdict をサポート (issue 269)

  • 内部の scrapy.core.scraper スロット処理を簡素化 (issue 271)

  • Item.copy 追加 (issue 290)

  • アイドル状態のダウンローダー・スロットを収集する (issue 297)

  • ftp:// スキームのダウンローダー・ハンドラー追加 (issue 329)

  • ダウンローダー・ベンチマーク・ウェブサーバーとスパイダー・ツールを追加 ベンチマーキング

  • (ディスク上の)永続的なキューを、Scrapyが依存する別のプロジェクト( queuelib )に移動しました

  • 外部ライブラリを使用してScrapyコマンドを追加 (issue 260)

  • scrapy コマンドライン・ツールに --pdb オプションを追加

  • XPathSelector.remove_namespaces を追加しました。これにより、便利にXML文書からすべての名前空間を削除できます(名前空間のないXPathを操作するため)。 セレクター に記載されています。

  • スパイダー規約のいくつかの改善

  • meta-refreshhtmlタグのリダイレクトを処理するMetaRefreshMiddldewareという名前の新しいデフォルトのミドルウェア、

  • MetaRefreshMiddldewareとRedirectMiddlewareには、 #62 に対処するための異なる優先順位があります

  • スパイダーにfrom_crawlerメソッド追加

  • モック・サーバーによるシステムテストを追加

  • macOS互換性のさらなる改善(Alex Cepoiに感謝)

  • シングルトンとマルチ・スパイダーのサポートに対するさらにいくつかの整理(Nicolas Ramirezに感謝)

  • カスタム・ダウンロード・スロットをサポート

  • "shell" コマンドに --spider オプション追加。

  • Scrapyの起動時にオーバーライドされた設定をログに記録する

このリリースに貢献してくれたすべての人に感謝します。コミット数でソートされた貢献者のリストは以下のとおりです:

130 Pablo Hoffman <pablo@...>
 97 Daniel Graña <dangra@...>
 20 Nicolás Ramírez <nramirez.uy@...>
 13 Mikhail Korobov <kmike84@...>
 12 Pedro Faustino <pedrobandim@...>
 11 Steven Almeroth <sroth77@...>
  5 Rolando Espinoza La fuente <darkrho@...>
  4 Michal Danilak <mimino.coder@...>
  4 Alex Cepoi <alex.cepoi@...>
  4 Alexandr N Zamaraev (aka tonal) <tonal@...>
  3 paul <paul.tremberth@...>
  3 Martin Olveyra <molveyra@...>
  3 Jordi Llonch <llonchj@...>
  3 arijitchakraborty <myself.arijit@...>
  2 Shane Evans <shane.evans@...>
  2 joehillen <joehillen@...>
  2 Hart <HartSimha@...>
  2 Dan <ellisd23@...>
  1 Zuhao Wan <wanzuhao@...>
  1 whodatninja <blake@...>
  1 vkrest <v.krestiannykov@...>
  1 tpeng <pengtaoo@...>
  1 Tom Mortimer-Jones <tom@...>
  1 Rocio Aramberri <roschegel@...>
  1 Pedro <pedro@...>
  1 notsobad <wangxiaohugg@...>
  1 Natan L <kuyanatan.nlao@...>
  1 Mark Grey <mark.grey@...>
  1 Luan <luanpab@...>
  1 Libor Nenadál <libor.nenadal@...>
  1 Juan M Uys <opyate@...>
  1 Jonas Brunsgaard <jonas.brunsgaard@...>
  1 Ilya Baryshev <baryshev@...>
  1 Hasnain Lakhani <m.hasnain.lakhani@...>
  1 Emanuel Schorsch <emschorsch@...>
  1 Chris Tilden <chris.tilden@...>
  1 Capi Etheriel <barraponto@...>
  1 cacovsky <amarquesferraz@...>
  1 Berend Iwema <berend@...>

Scrapy 0.16.5 (released 2013-05-30)

  • Scrapyデプロイが新しいエンドポイントにリダイレクトされるときにリクエスト・メソッドに従います (commit 8c4fcee)

  • 不正確なダウンローダー・ミドルウェアの文書を修正。 refs #280 (commit 40667cb)

  • 文書: 現在利用できなくなったdiveintopython.orgへのリンクを削除。 #246 をクローズ (commit bd58bfa)

  • 不正なhtml5ドキュメントでフォーム・ノードを検索します (commit e3d6945)

  • リストの代わりにタイプミスのラベル付け属性タイプboolを修正 (commit a274276)

Scrapy 0.16.4 (released 2013-01-23)

  • 文書のスペルミスを修正 (commit 6d2b3aa)

  • 拡張機能の無効化に関する文書を追加。 refs #132 (commit c90de33)

  • エラー・メッセージの書式を修正しました。 log.err() はクールな書式をサポートしておらず、エラーが発生した場合、メッセージは "ERROR: Error processing %(item)s" でした。 (commit c16150c)

  • lintおよび画像パイプライン・エラーのロギングの改善 (commit 56b45fc)

  • 文書のタイプミスを修正 (commit 243be84)

  • 文書トピックを追加: 幅広いクロールと一般的な慣行 (commit 1fbb715)

  • スパイダーが明示的に指定されていない場合のScrapy parseコマンドのバグを修正。 #209 をクローズ (commit c72e682)

  • docs/topics/commands.rst を更新 (commit 28eac7a)

Scrapy 0.16.3 (released 2012-12-07)

  • ダウンロード遅延を使用する場合の同時実行制限を削除し、リクエスト間の遅延が強制されるようにします (commit 487b9b5)

  • 画像パイプラインが失敗したときにエラーの詳細を追加 (commit 8232569)

  • macOS互換性を改善 (commit 8dcf8aa)

  • setup.py: README.rstを使用してlong_descriptionにデータを入力します (commit 7b5310d)

  • 文書: ClientFormへの廃止された参照を削除 (commit 80f9bb6)

  • デフォルトのストレージ・バックエンドの正しい文書 (commit 2aa491b)

  • 文書: FAQから壊れたproxyhubリンクを削除 (commit bdf61c4)

  • SpiderOpenCloseLoggingの例の文書のタイプミスを修正 (commit 7184094)

Scrapy 0.16.2 (released 2012-11-09)

Scrapy 0.16.1 (released 2012-10-26)

  • 0.16リリースの前に間違ったマージの後に壊れていたLogStats拡張機能を修正 (commit 8c780fd)

  • scarp.conf.settingsの下位互換性が向上しました (commit 3403089)

  • 拡張機能からクローラー統計にアクセスする方法に関する拡張文書 (commit c4da0b5)

  • .hgtagsを削除しました(Scrapyがgitを使用するようになったため、不要になりました) (commit d52c188)

  • 最初のヘッダーの下のダッシュを修正 (commit fa4f7f9)

  • リリース・ノートの0.16.0にリリース日を設定 (commit e292246)

Scrapy 0.16.0 (released 2012-10-18)

Scrapyの変更:

  • 追加された スパイダー規約(contract) は、形式的/再現可能な方法でスパイダーをテストするためのメカニズムです。

  • runspider コマンドにオプション -o-t を追加しました

  • AutoThrottle拡張機能 を文書化し、デフォルトでインストールされる拡張機能に追加しました。あなたはいまだ AUTOTHROTTLE_ENABLED でそれを有効にする必要があります

  • 主要な統計コレクションのリファクタリング: グローバル/スパイダーごとの統計の分離を削除し、統計関連の信号( stats_spider_opened など)を削除しました。統計がはるかにシンプルになり、Stats Collector APIとシグナルで下位互換性が維持されます。

  • スパイダー・ミドルウェアに process_start_requests() メソッドを追加した

  • Signalsシングルトンを削除しました。これで、Crawler.signals属性を介してシグナルにアクセスできるようになります。詳細については、シグナルのドキュメントを参照してください。

  • StatsCollectorシングルトンを削除しました。 Crawler.stats属性を介して統計にアクセスできるようになりました。 詳細については、統計コレクションのドキュメントを参照してください。

  • コアAPI について文書化した

  • libxml2 に代わり、 今や lxml がデフォルトのセレクター・バックエンドです

  • FormRequest.from_response() を移植して、 ClientForm の代わりに lxml を使用する

  • モジュール削除: scrapy.xlib.BeautifulSoupscrapy.xlib.ClientForm

  • SitemapSpider: 間違ったコンテンツ・タイプを主張(advertise)する場合、つまり、.xml および .xml.gz で終わるサイトマップURLのサポートが追加されました (commit 10ed28b)

  • StackTraceDump拡張機能: trackrefライブ参照もダンプします (commit fe2ce93)

  • ネストされたアイテムがJSONおよびJSONLinesエクスポーターで完全にサポートされるようになりました

  • スパイダーごとに複数のCookieセッションをサポートするための cookiejar リクエスト・メタ・キーを追加しました

  • エンコーディング検出コードを w3lib.encoding に分離し、そのモジュールを使用するためにScrapyコードを移植しました

  • Python 2.5 のサポートを終了しました。https://blog.scrapinghub.com/2012/02/27/scrapy-0-15-dropping-support-for-python-2-5/ 参照

  • Twisted 2.5 のサポートを終了した

  • リファラー・ミドルウェアを制御するために REFERER_ENABLED 設定を追加しました

  • デフォルトのユーザーエージェントを Scrapy/VERSION (+http://scrapy.org) に変更しました

  • scrapy.contrib.linkextractors.image から HTMLImageLinkExtractor クラスを削除(文書化されていない)

  • スパイダーごとの設定を削除しました(複数のクローラーオブジェクトをインスタンス化することで置き換えられます)

  • USER_AGENT スパイダー属性はもはや動作しません。代わりに user_agent 属性を使って下さい。

  • DOWNLOAD_TIMEOUT スパイダー属性はもはや動作しません。代わりに download_timeout 属性を使って下さい。

  • エンコーディングの自動検出が w3lib ライブラリに移動されたため、 ENCODING_ALIASES 設定が削除されました

  • DjangoItem をメインの投稿に昇格

  • LogFormatterメソッドは、遅延フォーマットをサポートするために、(文字列ではなく)辞書を返すようになりました (issue 164, commit dcef7b0)

  • ダウンローダー・ハンドラー(DOWNLOAD_HANDLERS 設定)は、 __init__ メソッドの最初の引数として設定を受け取るようになりました

  • メモリ使用量のカウントを(より移植性の高い) resource モジュールに置き換え、 scrapy.utils.memory モジュールを削除しました

  • シグナル削除した: scrapy.mail.mail_sent

  • TRACK_REFS 設定を削除し、 trackrefs が常に有効になりました

  • DBMがHTTPキャッシュ・ミドルウェアのデフォルトのストレージ・バックエンドになりました

  • (レベルごとの)ログ・メッセージの数がScrapy統計(統計名: log_count/LEVEL )で追跡されるようになりました

  • 受信したレスポンスの数がScrapy統計(統計名: response_received_count )で追跡されるようになりました

  • scrapy.log.started 属性を削除した

Scrapy 0.14.4

  • サポートされているUbuntuディストリビューションに追加されました (commit b7e46df)

  • https://groups.google.com/forum/#!topic/scrapy-users/qgVBmFybNAQ/discussionで報告されたjson-rpcWebサービスのバグを修正しました。 また、extras/scrapy-ws.pyからサポートされなくなった 'run' コマンドも削除されました

  • content-type http equivのメタ・タグ属性は、任意の順序にすることができます。 #123 (commit 0cb68af)

  • "import Image" をより標準的な "from PIL import Image" に置き換えます。 #88 をクローズ (commit 4d17048)

  • trialステータスを bin/runtests.sh 終了値として返します。 #118 (commit b7b2e7f)

Scrapy 0.14.3

  • pydispatchライセンスを含めるのを忘れていました。 #118 (commit fd85f9c)

  • testsuiteが使用するeggファイルをソース配布に含めます。 #118 (commit c897793)

  • 高度な機能と見なされる可能性のあるgenspiderコマンドとの混同を避けるために、プロジェクト・テンプレートのdocstringを更新します。 refs #107 (commit 2548dcc)

  • グーグル・ディレクトリがシャットダウンされることについての注記を docs/topics/firebug.rst に追加 (commit 668e352)

  • 空のときにスロットを破棄しないでください。必要に応じて再度リサイクルするために、別の辞書に保存してください。 (commit 8e9f607)

  • libxml2でサポートされているセレクターでのunicode xpathの処理に失敗しないでください (commit b830e95)

  • リクエスト・オブジェクトの文書の些細な間違いを修正 (commit bf3c9ee)

  • リンク抽出器の文書の些細な欠陥を修正 (commit ba14f38)

  • Scrapyでのsqliteサポートに関連するいくつかの廃止済のコードの残りを削除 (commit 0665175)

Scrapy 0.14.2

  • チェックサムを計算する前に、ファイルの先頭を指すバッファを移動します。 refs #92 (commit 6a5bef2)

  • 画像を永続化する前に、画像のチェックサムを計算します。 #92 をクローズ (commit 9817df1)

  • キャッシュされた障害でリークしている参照を削除 (commit 673a120)

  • MemoryUsage拡張機能のバグを修正した: get_engine_status() は正確に1つの引数を取ります(0個しか与えられていない) (commit 11133e9)

  • http圧縮ミドルウェアのstruct.errorを修正。 #87 をクローズ (commit 1423140)

  • ajaxクロールはunicode URLに対して拡張されていませんでした (commit 0de3fb4)

  • start_requests イテレータ・エラーをキャッチします。 refs #83 (commit 454a21d)

  • libxml2 XPathSelector の速度向上 (commit 2fbd662)

  • 最近の変更に応じてバージョン管理文書を更新 (commit 0a070f5)

  • scrapyd: 文書のリンク修正 (commit 2b4e4c3)

  • extras/makedeb.py: gitからバージョンを取得しなくなりました (commit caffe0e)

Scrapy 0.14.1

  • extras/makedeb.py: gitからバージョンを取得しなくなりました (commit caffe0e)

  • バージョンを0.14.1に上げました (commit 6cb9e1c)

  • チュートリアル・ディレクトリへの参照を修正 (commit 4b86bd6)

  • 文書: Request.replace() から重複したコールバック引数を削除 (commit 1aeccdd)

  • scrapyd文書の書式を修正 (commit 8bf19e6)

  • 実行中のすべてのスレッドのスタックをダンプし、StackTraceDump拡張機能によってダンプされたエンジン・ステータスを修正します (commit 14a8e6e)

  • boto画像のアップロードでSSLを無効にする理由についてのコメントを追加 (commit 5223575)

  • S3への並列接続が多すぎるとSSLハンドシェイクがハングします (commit 63d583d)

  • dmozサイトの変更に従うようにチュートリアルを変更 (commit bcb3198)

  • Twisted>=11.1.0 での _disconnectedDeferred AttributeError 例外を回避します (commit 98f3f87)

  • スパイダーがオート・スロットルの最大同時実行性を設定できるようにする (commit 175a4b5)

Scrapy 0.14

新機能と新設定

  • AJAX crawleable urls (AJAXクロール可能URL)をサポート

  • リクエストをディスクに保存し、クロールを一時停止および再開できる新しい永続スケジューラ (r2737)

  • スクレイピングされたアイテムをファイルにダンプするためのショートカットである scrapy crawl-o オプションを追加しました(または - を使用した標準出力)

  • Scrapyd schedule.json apiにカスタム設定を渡すためのサポートが追加されました (r2779, r2783)

  • chunked transfer encoding (チャンク転送エンコーディング) をサポートするための新しい ChunkedTransferMiddleware (デフォルトで有効) (r2769)

  • S3ダウンローダー・ハンドラーにboto 2.0サポートを追加 (r2763)

  • フィードのエクスポートでサポートされる形式に marshal を追加しました (r2744)

  • リクエストのエラー・バックで、問題のあるリクエストが failure.request 属性で受信されるようになりました (r2738)

  • ドメイン/IPごとの同時実行制限をサポートするための大きなダウンローダーのリファクタリング (r2732)
  • 組み込みのキャッシュDNSリゾルバーを追加 (r2728)

  • Amazon AWS関連のコンポーネント/拡張機能(SQSスパイダー・キュー、SimpleDB統計コレクター)を別のプロジェクトに移動しました: [scaws](https://github.com/scrapinghub/scaws) (r2706, r2714)

  • scrapydのスパイダー・キューを移動した: scrapy.spiderqueue から scrapyd.spiderqueue へ (r2708)

  • scrapydのsqliteユーティリティを移動した: scrapy.utils.sqlite から scrapyd.sqlite へ (r2781)

  • start_requests() メソッドでイテレータを返すための実際のサポート。 スパイダーがアイドル状態になっているクロール中にイテレーターが消費されるようになりました (r2704)

  • リダイレクト・ミドルウェアをすばやく有効/無効にする REDIRECT_ENABLED 設定を追加 (r2697)

  • 再試行ミドルウェアをすばやく有効/無効にする RETRY_ENABLED 設定を追加 (r2694)

  • スパイダーを手動で閉じるための CloseSpider 例外を追加 (r2691)

  • HTML5 meta charset 宣言のサポートを追加することによるエンコーディング検出の改善 (r2690)

  • スパイダーを閉じる前に、すべてのダウンロードが終了してスパイダーによって処理されるのを待つように、スパイダーを閉じる動作をリファクタリングしました (r2688)

  • SitemapSpider を追加(Spiders pageの文書参照) (r2658)

  • 基本的な統計(クロールされたページやスクレイピングされたアイテムなど)を定期的にログに記録するための LogStats 拡張機能が追加されました (r2657)

  • gzip圧縮されたレスポンスの処理をより堅牢にします (#319, r2643) 。これで、Scrapyは、 IOError で失敗するのではなく、gzip圧縮されたレスポンスから可能な限り解凍しようとします。

  • メモリ・デバッグ情報をダンプするための統計を使用するための簡略化された !MemoryDebugger 拡張機能 (r2639)

  • スパイダーを編集するための新しいコマンドを追加しました: scrapy edit (r2636) と、 -e フラグをそれを使用する genspider コマンドに追加しました (r2653)

  • アイテムのデフォルトの表現をきれいに印刷される辞書に変更しました。 (r2631) 。これにより、Scraped行とDropped行の両方について、デフォルトの場合にログが読みやすくなるため、デフォルトのログが改善されます。

  • spider_error シグナル追加 (r2628)

  • COOKIES_ENABLED 設定追加 (r2625)

  • 統計がScrapyログにダンプされるようになりました( STATS_DUMP 設定のデフォルト値が True に変更されました)。これは、ScrapyユーザーがScrapyの統計とそこで収集されるデータをより認識できるようにするためです。

  • ダウンロード遅延と最大同時リクエストを動的に調整するためのサポートが追加されました (r2599)

  • 新しいDBM HTTPキャッシュ・ストレージ・バックエンドを追加 (r2576)

  • Scrapyd へ listjobs.json API を追加 (r2571)

  • CsvItemExporter: join_multivalued パラメーター追加 (r2578)

  • xmliter_lxml に名前空間のサポートを追加 (r2552)

  • COOKIES_DEBUG をより良くし、それを文書化することにより、Cookieミドルウェアを改善しました (r2579)

  • ScrapydおよびLink抽出器のいくつかの改善

コードの再配置と削除

  • 過去に混乱を招くことが多かったため、マージされたアイテムの通過(pass)とアイテムのスクレイプの概念について以下の変更 (r2630) :
    • 元のitem_scrapedシグナルが削除されました

    • 元のitem_passedシグナルはitem_scrapedに名前が変更されました

    • 古いログ行の Scraped Item... は削除されました

    • 古いログ行の Passed Item...Scraped Item... に名前変更され、 DEBUG レベルに降格されました

  • Scrapyコードの一部を2つの新しいライブラリに分散させることにより、Scrapyコードベースを削減しました:
    • w3lib ( scrapy.utils.{http,markup,multipart,response,url} からの幾つかの関数がこの中に入りました r2584)

    • scrapely (scrapy.contrib.ibl からこの中に入りました r2586)

  • 未使用関数削除: scrapy.utils.request.request_info() (r2577)

  • examples/googledir からgoogledirプロジェクトを削除しました。 GitHubで利用可能な dirbot と呼ばれる新しいサンプル・プロジェクトがあります: https://github.com/scrapy/dirbot

  • Scrapyアイテムのデフォルト・フィールド値のサポートを削除 (r2616)

  • 実験的な crawlspider v2 を削除 (r2632)

  • アーキテクチャを簡素化するためにスケジューラ・ミドルウェアを削除しました。 重複フィルターは、以前と同じ重複フィルター・クラスを使用して、スケジューラー自体で実行されるようになりました( DUPEFILTER_CLASS 設定) (r2640)

  • scrapy crawl コマンドにURLを渡すためのサポートを削除しました(代わりに scrapy parse を使用してください) (r2704)

  • 非推奨の実行キュー(Execution Queue)を削除 (r2704)

  • 削除された(文書化されていない)(scrapy.contrib.spidercontextからの)スパイダー・コンテキスト拡張 (r2780)

  • CONCURRENT_SPIDERS 設定を削除しました(代わりにscrapyd maxprocを使用してください) (r2789)

  • コア・コンポーネントの属性の名前が変更されました: downloader.sites → downloader.slots、 scraper.sites → scraper.slots (r2717, r2718)

  • 設定の名前を CLOSESPIDER_ITEMPASSED から CLOSESPIDER_ITEMCOUNT に変更しました (r2655) 。下位互換性は維持されます。

Scrapy 0.12

#NNN形式の番号は古い課題トラッカー(issue tracker)(Trac)の参照チケット番号なので、もはや利用できません。

新機能と改善点

  • 渡されたアイテムは、 item_passeditem 引数で送信されるようになりました (#273)

  • バグ・レポートに役立つ scrapy version コマンドにverboseオプションを追加しました (#298)

  • HTTPキャッシュがデフォルトでプロジェクト・データ・ディレクトリに保存されるようになりました (#279)

  • プロジェクト用データ保存ディレクトリ追加 (#276, #277)

  • Scrapyプロジェクトのファイル構成について文書化(コマンドライン・ツール文書参照)

  • XPathセレクター用の新しいlxmlバックエンド (#147)

  • スパイダー毎の設定 (#245)

  • Scrapyコマンドのエラーを通知するための終了コードをサポートします (#248)

  • scrapy shell コマンドに -c 引数を追加した

  • libxml2 をオプションにしました (#260)

  • deploy コマンド (#261)

  • CLOSESPIDER_PAGECOUNT 設定を追加 (#253)

  • CLOSESPIDER_ERRORCOUNT 設定を追加 (#254)

Scrapydの変更

  • Scrapydはスパイダーごとに1つのプロセスを使用するようになりました

  • スパイダーの実行ごとに1つのログファイルを保存し、スパイダーごとに最新の5つのログを保持してローテーションします(デフォルト)

  • 最小限のWebUIが追加され、デフォルトでは http://localhost:6800 が有効です。

  • 現在のプロジェクトのScrapydサーバを起動するために scrapy server コマンドが用意されました

設定の変更

  • HTTPキャッシュミドルウェアを有効にするための HTTPCACHE_ENABLED 設定(デフォルトではFalse)を追加

  • HTTPCACHE_EXPIRATION_SECS セマンティクスを変更しました: ゼロは「期限切れにならない」ことを意味します。

非推奨/廃止された機能

  • Scrapydサーバーを起動する server コマンドを優先して、 runserver コマンドは非推奨になりました。Scrapydの変更も参照して下さい。

  • Scrapyd `` schedule.json`` APIの使用を優先して、queue コマンドが非推奨になりました。Scrapydの変更も参照して下さい。

  • !LxmlItemLoader(メインの投稿に昇格したことのない実験的な投稿)を削除しました

Scrapy 0.10

#NNN形式の番号は古い課題トラッカー(issue tracker)(Trac)の参照チケット番号なので、もはや利用できません。

新機能と改善点

  • Scrapyクローラーを実稼働環境に展開するための scrapyd と呼ばれる新しいScrapyサービス(#218)(ドキュメントあり)

  • 独自の画像パイプラインをサブクラス化する必要がない簡略化された画像パイプラインの使用法 (#217)

  • ScrapyシェルにデフォルトでScrapyログが表示されるようになりました (#206)

  • 共通ベース・コードのリファクタリングされた実行キューと "spider queues" と呼ばれる着脱可能なバックエンド (#220)

  • デフォルトで利用可能な新しい(SQLiteベースの)永続スパイダー・キュー (#198) 。サーバー・モードでScrapyを起動し、スパイダーの実行をスケジュールできます。

  • Scrapyコマンドライン・ツールとそのすべての利用可能なサブ・コマンドの文書を追加(文書が利用可能)

  • 着脱可能なバックエンドを備えたフィード・エクスポーター (#197) (文書が利用可能)

  • 遅延(deferred)シグナル (#193)

  • アイテム・パイプラインに2つの新しいメソッド open_spider() と、 deferredサポート付きの close_spider() を追加しました (#195)

  • スパイダーごとのデフォルトのリクエスト・ヘッダーのオーバーライドのサポート (#181)

  • デフォルトのSpiderManagerを、同様の機能を持つがTwisted Pluginsに依存しないものに置き換えました (#186)

  • 二つのパッケージに分割さDebianパッケージ - ライブラリとサービス (#187)

  • Scrapyログ機能リファクタリング (#188)

  • 異なる実行間で永続的なスパイダー・コンテキストを維持するための新しい拡張機能 (#203)

  • リダイレクトを回避するための dont_redirect request.meta キーを追加 (#233)

  • 再試行を回避するための dont_retry request.metaキーを追加 (#234)

コマンドライン・ツールの変更

  • 古い scrapy-ctl.py を置き換える新しい scrapy コマンド (#199) 。プロジェクト毎に一つの scrapy-ctl.py ではなく、グローバルな scrapy コマンドが1つだけになりました。Windowsからより便利に実行するための scrapy.bat スクリプトを追加しました。

  • コマンドライン・ツールにbash補完を追加 (#210)

  • コマンド startrunserver に名前変更 (#209)

API変更

  • Requestオブジェクトの urlbody 属性は今や読み取り専用です (#230)

  • Request.copy()Request.replace() は、それらの callbackerrback 属性もコピーするようになりました (#231)

  • scrapy.contrib から UrlFilterMiddleware を削除しました(デフォルトでは既に無効になっています)

  • オフサイト・ミドルウェアは、allowed_domains属性を持たないスパイダーからのリクエストを除外しません (#225)

  • Spider Manager の load() メソッドを削除。今やスパイダーは __init__ メソッドそれ自身によってロードされるます。

  • Scrapyマネージャーを変更しました(今や "Crawler" といわれます):
    • scrapy.core.manager.ScrapyManager クラスは scrapy.crawler.Crawler に名前変更しました。

    • scrapy.core.manager.scrapymanager シングルトンは scrapy.project.crawler に移動しました。

  • モジュール移動: scrapy.contrib.spidermanager から scrapy.spidermanager

  • SpiderManager シングルトンが scrapy.spider.spiders から scrapy.project.crawler シングルトンの spiders 属性に移動しました。

  • 統計収集クラス群を移動した: (#204)
    • scrapy.stats.collector.StatsCollector から scrapy.statscol.StatsCollector

    • scrapy.stats.collector.SimpledbStatsCollector から scrapy.contrib.statscol.SimpledbStatsCollector

  • コマンドごとのデフォルト設定が、コマンド・オブジェクト・クラスの default_settings 属性で指定されるようになりました (#201)

  • Itemパイプライン process_item() メソッドの引数を (spider, item) から (item, spider) に変更しました
    • 後方互換性の維持(非推奨警告付き)

  • scrapy.core.signals モジュールを scrapy.signals へ移動した
    • 後方互換性の維持(非推奨警告付き)

  • scrapy.core.exceptions モジュールを scrapy.exceptions へ移動した
    • 後方互換性の維持(非推奨警告付き)

  • BaseSpiderhandles_request() クラス・メソッド追加

  • scrapy.log.exc() 関数を削除 (代わりに scrapy.log.err() を使ってください)

  • scrapy.log.msg() 関数の component 引数を削除

  • scrapy.log.log_level 属性を削除

  • Spider Manager と Item Pipeline Manager に from_settings() クラス・メソッドを追加

設定の変更

  • !HttpCacheMiddlewareの特定のスキームを無視するための HTTPCACHE_IGNORE_SCHEMES 設定を追加 (#225)

  • 使用するスパイダー・キューを定義する SPIDER_QUEUE_CLASS 設定を追加 (#220)

  • KEEP_ALIVE 設定を追加 (#220)

  • SERVICE_QUEUE 設定を削除 (#220)

  • COMMANDS_SETTINGS_MODULE 設定を削除 (#201)

  • REQUEST_HANDLERS の名前を DOWNLOAD_HANDLERS に変更し、(関数の代わりに)ダウンロード・ハンドラー・クラスを作成しました

Scrapy 0.9

#NNN形式の番号は古い課題トラッカー(issue tracker)(Trac)の参照チケット番号なので、もはや利用できません。

新機能と改善点

  • scrapy.mailにSMTP-AUTHサポートを追加。

  • 新設定追加: MAIL_USER, MAIL_PASS (r2065 | #149)

  • 新しいscrapy-ctlviewコマンドを追加 - Scrapyで見られるように、ブラウザーでURLを表示します (r2039)

  • Scrapyプロセスを制御するためのWebサービスが追加されました(これにより、Webコンソールも非推奨になります。 (r2053 | #167)

  • 本番システムの為に、Scrapyをサービスとして実行するためのサポート (r1988, r2054, r2055, r2056, r2057 | #168)

  • ラッパー帰納(wrapper induction)ライブラリを追加しました(文書は現在ソースコードでのみ利用可能です)。 (r2011)

  • 簡素化および改善されたレスポンスのエンコーディングのサポート (r1961, r1969)

  • LOG_ENCODING 設定追加 (r1956, 文書あり)

  • RANDOMIZE_DOWNLOAD_DELAY 設定を追加(デフォルトで有効) (r1923, 文書あり)

  • MailSender はもはや入出力ブロッキングしません (r1955 | #146)

  • Linkextractors と 新しい Crawlspider は今や相対ベースタグURLを処理するようになりました (r1960 | #148)

  • アイテムローダーとプロセッサのいくつかの改善 (r2022, r2023, r2024, r2025, r2026, r2027, r2028, r2029, r2030)

  • telnetコンソールに変数を追加するためのサポートが追加されました (r2047 | #165)

  • コールバックなしのリクエストのサポート (r2050 | #166)

API変更

  • Spider.domain_name から Spider.name へ変更 (SEP-012, r1975)

  • Response.encoding は今やエンコーディングを検知します (r1961)

  • HttpErrorMiddleware は今やNoneを返すか、または例外を引き起こします (r2006 | #157)

  • scrapy.command モジュール群の再配置 (r2035, r2036, r2037)

  • スクラップするためのフィード・スパイダーのための ExecutionQueue を追加 (r2034)

  • ExecutionEngine シングルトンを削除 (r2039)

  • botoとスレッドを使用するために S3ImagesStore (画像パイプライン)を移植しました (r2033)

  • モジュール移動: scrapy.management.telnetscrapy.telnet へ (r2047)

デフォルト設定の変更

  • デフォルトの SCHEDULER_ORDERDFO に変更しました (r1939)

Scrapy 0.8

#NNN形式の番号は古い課題トラッカー(issue tracker)(Trac)の参照チケット番号なので、もはや利用できません。

新機能

  • DEFAULT_RESPONSE_ENCODING 設定追加 (r1809)

  • FormRequest.from_response() メソッドに dont_click 引数追加 (r1813, r1816)

  • FormRequest.from_response() メソッドに clickdata` 引数追加 (r1802, r1803)

  • HTTPプロキシー (HttpProxyMiddleware) サポートの追加 (r1781, r1785)

  • オフサイト・スパイダー・ミドルウェアは、リクエストを除外するときにメッセージをログに記録するようになりました (r1841)

後方互換性のない変更

  • scrapy.utils.response.get_meta_refresh() シグネチャを変更した (r1804)

  • scrapy.item.ScrapedItem class を非推奨削除。代わりに scrapy.item.Item を使って下さい (r1838)

  • scrapy.xpath モジュールを非推奨削除。代わりに scrapy.selector を使って下さい。 (r1836)

  • core.signals.domain_open シグナルを非推奨削除。代わりに core.signals.domain_opened を使って下さい (r1822)

  • log.msg() は今や spider 引数を受け入れます (r1822)
    • 古いドメイン引数は非推奨になり、0.9で削除される予定です。 スパイダーの場合は、常に spider 引数を使用し、スパイダーへの参照を渡す必要があります。 本当に文字列を渡したい場合は、代わりに component 引数を使用してください。

  • コア・シグナル domain_opened, domain_closed, domain_idle を変更した

  • ドメインの代わりにスパイダーを使用するようにアイテム・パイプラインを変更しました
    • process_item() アイテム・パイプライン・メソッドの domain 引数が spider に変更され、新しいシグネチャは次のようになります: process_item(spider, item) (r1827 | #105)

    • (Scrapy 0.8で動作するように)コードをすばやく移植するには、以前に domain を使用していたあなたは、 spider.domain_name を使用するだけです。

  • ドメインの代わりにスパイダーを使用するようにStatsAPIを変更しました (r1849 | #113)
    • StatsCollector は、そのメソッド( set_valueinc_value など)で(ドメインではなく)スパイダーへの参照を受け取るように変更されました。

    • StatsCollector.iter_spider_stats() メソッドを追加

    • StatsCollector.list_domains() メソッドを削除

    • また、Statsシグナルの名前が変更され、(ドメインではなく)スパイダーへの参照を渡すようになりました。 変更の概要は以下のとおりです:

    • (Scrapy 0.8で動作するように)コードをすばやく移植するには、以前に domain を使用していたあなたは spider.domain_name を使用するだけです。 spider_stats には、 domain_stats とまったく同じデータが含まれています。

  • CloseDomain 拡張機能が scrapy.contrib.closespider.CloseSpider に移動しました (r1833)
    • 以下の設定は名前を変更しました:
      • CLOSEDOMAIN_TIMEOUT から CLOSESPIDER_TIMEOUT

      • CLOSEDOMAIN_ITEMCOUNT から CLOSESPIDER_ITEMCOUNT

  • 削除 SCRAPYSETTINGS_MODULE 環境変数を非推奨のため削除。代わりに SCRAPY_SETTINGS_MODULE を使ってください。 (r1840)

  • 名前変更 設定: REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_SPIDER へ (r1830, r1844)

  • 名前変更 設定: CONCURRENT_DOMAINSCONCURRENT_SPIDERS へ (r1830)

  • HTTPキャッシュ・ミドルウェアのリファクタリング

  • HTTPキャッシュミドルウェアは大幅にリファクタリングされましたが、削除されたドメイン・セクター化(sectorization)を除いて同じ機能を保持しています。 (r1843 )

  • 名前変更 例外 DontCloseDomainDontCloseSpider へ (r1859 | #120)

  • 名前変更 エクステンション: DelayedCloseDomainSpiderCloseDelay へ (r1861 | #121)

  • 削除 scrapy.utils.markup.remove_escape_chars 関数を廃止。代わりに scrapy.utils.markup.replace_escape_chars を使ってください (r1865)

Scrapy 0.7

Scrapyの最初のリリース。