发行说明

Srapy 2.5.0(2021-04-06)

亮点:

  • 官方Python 3.9支持

  • 实验性的 HTTP/2 support

  • 新的 get_retry_request() 函数重试来自爬行器回调的请求

  • 新的 headers_received 允许提前停止下载的信号

  • 新的 Response.protocol 属性

折旧清除

贬抑

  • 这个 scrapy.utils.py36 模块现在已弃用,取而代之的是 scrapy.utils.asyncgen 。 (issue 4900 )

新特点

错误修复

文档

质量保证

Srapy 2.4.1(2020-11-17)

Scrapy 2.4.0(2020-10/11)

亮点:

  • 已放弃对Python3.5的支持。

  • 这个 file_path 一种方法 media pipelines 现在可以访问源代码 item

    这允许您根据项目数据设置下载文件路径。

  • 新的 item_export_kwargs 的关键字 FEEDS 设置允许定义要传递到的关键字参数 item exporter classes

  • 您现在可以选择是否 feed exports 覆盖或附加到输出文件。

    例如,在使用 crawlrunspider 命令,您可以使用 -O 选项,而不是 -o 若要覆盖输出文件,请执行以下操作。

  • 在以下情况下,现在支持Zstd压缩响应 zstandard 已安装。

  • 在需要类的导入路径的设置中,现在可以改为传递类对象。

修改后的要求

向后不兼容的更改

  • CookiesMiddleware 再次丢弃在中定义的Cookie Request.headers

    我们决定恢复Scrapy 2.2.0中引入的这个错误修复,因为据报道,当前的实现可能会破坏现有代码。

    如果需要为请求设置cookie,请使用 Request.cookies 参数。

    Scrapy的未来版本将包括恢复的错误修复的新的、更好的实现。

    (issue 4717issue 4823 )

折旧清除

  • scrapy.extensions.feedexport.S3FeedStorage no longer reads the values of access_key and secret_key from the running project settings when they are not passed to its __init__ method; you must either pass those parameters to its __init__ method or use S3FeedStorage.from_crawler (issue 4356, issue 4411, issue 4688)

  • Rule.process_request no longer admits callables which expect a single request parameter, rather than both request and response (issue 4818)

贬抑

新特点

错误修复

文档

质量保证

刮痧2.3.0(2020-08-04)

亮点:

折旧清除

  • 从中删除了以下类及其父模块 scrapy.linkextractors

    • htmlparser.HtmlParserLinkExtractor

    • regex.RegexLinkExtractor

    • sgml.BaseSgmlLinkExtractor

    • sgml.SgmlLinkExtractor

    使用 LinkExtractor 相反 (issue 4356issue 4679

贬抑

  • 这个 scrapy.utils.python.retry_on_eintr 函数现在已弃用 (issue 4683

新特点

错误修复

文档

质量保证

  • The base implementation of item loaders has been moved into itemloaders (issue 4005, issue 4516)

  • 修复了某些调度程序中的错误 (issue 4644issue 4645

  • 已续订用于SSL测试的本地主机证书 (issue 4650

  • 删除了python2特有的cookie处理代码 (issue 4682

  • 停止使用Python2 unicode文本语法 (issue 4704

  • 停止使用齿隙来继续生产线 (issue 4673

  • 从MyPy异常列表中删除了不需要的条目 (issue 4690

  • 自动化测试现在作为我们持续集成系统的一部分在Windows上传递 (issue 4458

  • 自动化测试现在通过最新的PyPy版本来获得我们的持续集成系统中支持的Python版本 (issue 4504

2.2.1(2020-07-17)

刮痧2.2.0(2020-06-24)

亮点:

向后不兼容的更改

  • Support for Python 3.5.0 and 3.5.1 has been dropped; Scrapy now refuses to run with a Python version lower than 3.5.2, which introduced typing.Type (issue 4615)

贬抑

新特点

错误修复

文档

质量保证

刮痧2.1.0(2020-04-24)

亮点:

向后不兼容的更改

  • AssertionError 引发异常的原因 assert 语句已被新的异常类型取代,以支持在优化模式下运行Python(请参见 -O )不会以任何意想不到的方式改变斯帕蒂的行为。

    如果你抓住一个 AssertionError 来自Scrapy的异常,更新您的代码以捕获相应的新异常。

    (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

  • The MultiValueDict, MultiValueDictKeyError, and SiteNode classes have been removed from scrapy.utils.datatypes (issue 4400)

贬抑

新特点

错误修复

文档

质量保证

刮痧2.0.1(2020-03-18)

刮痧2.0.0(2020-03-03)

亮点:

向后不兼容的更改

折旧清除

  • 这个 Scrapy shell 不再提供 sel 代理对象,使用 response.selector 相反 (issue 4347

  • LevelDB支持已删除 (issue 4112

  • The following functions have been removed from scrapy.utils.python: isbinarytext, is_writable, setattr_default, stringify_dict (issue 4362)

贬抑

新特点

错误修复

文档

质量保证

计划程序队列类的更改

以下更改可能会影响所有类型的任何自定义队列类:

  • 这个 push 方法不再接收包含 request.priority * -1 . 如果需要该值,请从第一个位置参数获取它, request ,或者使用新的 priority() 方法在 scrapy.core.scheduler.ScrapyPriorityQueue 子类。

以下更改可能会影响自定义优先级队列类:

  • __init__ 方法或 from_crawlerfrom_settings 类方法:

    • 用于包含工厂函数的参数, qfactory ,现在作为名为的关键字参数传递 downstream_queue_cls .

    • 添加了一个新的关键字参数: key . 对于内存队列,它始终是空字符串,并指示 JOB_DIR 磁盘队列的值。

    • 包含上一次爬网数据的磁盘队列的参数, startpriosslot_startprios ,现在作为名为的关键字参数传递 startprios .

    • 这个 serialize 不再传递参数。在写入磁盘之前,磁盘队列类必须自己处理请求序列化,使用 request_to_dict()request_from_dict() 中的函数 scrapy.utils.reqser 模块。

以下更改可能会影响自定义磁盘和内存队列类:

  • 签名 __init__ 方法现在 __init__(self, crawler, key) .

以下更改特别影响 ScrapyPriorityQueueDownloaderAwarePriorityQueue 类来自 scrapy.core.scheduler 并可能影响子类:

  • __init__ 方法,则应用上述大多数更改。

    __init__ 仍然可以接收所有参数作为位置参数,但是:

    • downstream_queue_cls ,取代了 qfactory ,必须以不同的方式实例化。

      qfactory 已用优先级值(整数)实例化。

      实例 downstream_queue_cls 应该使用新的 ScrapyPriorityQueue.qfactoryDownloaderAwarePriorityQueue.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

1.8.0(2019-10-28)

亮点:

向后不兼容的更改

也见 折旧清除 下面。

新特点

错误修复

文档

折旧清除

贬抑

其他变化

刮伤1.7.4(2019-10-21)

Revert the fix for issue 3804 (issue 3819), which has a few undesired side effects (issue 3897, issue 3976).

因此,当项目加载器用项目初始化时, ItemLoader.load_item() 再次打电话给 ItemLoader.get_output_value()ItemLoader.load_item() 返回空数据。

1.7.3(2019-08-01)

对python3.4强制执行lxml4.3.5或更低版本 (issue 3912issue 3918

Scrapy 1.7.2(2019-07-23)

修复python 2支持 (issue 3889issue 3893issue 3896

Scrapy 1.7.1(2019-07-18)

重新包装Scrapy1.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 立即子类。

    Spider 子类实例从来没有打算工作,它们也没有像人们预期的那样工作:而不是使用 Spider 子类实例,它们的 from_crawler 方法以生成新实例。

  • 的非默认值 SCHEDULER_PRIORITY_QUEUE 设置可能停止工作。调度程序优先级队列类现在需要处理 Request 对象而不是任意的python数据结构。

  • 额外的 crawler 参数已添加到 __init__ 方法 Scheduler 班级。自定义调度程序子类不接受其 __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 (见 登录

  • 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 (和子类):

    • DOWNLOAD_DELAY (使用) download_delay

    • set_crawler (使用) from_crawler()

  • 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 ):

贬抑

  • 这个 queuelib.PriorityQueue 价值 SCHEDULER_PRIORITY_QUEUE 设置已弃用。使用 scrapy.pqueues.ScrapyPriorityQueue 相反。

  • process_request 回调传递给 Rule 不接受两个参数的将被弃用。

  • 以下模块已弃用:

    • scrapy.utils.http (使用) w3lib.http

    • scrapy.utils.markup (使用) w3lib.html

    • scrapy.utils.multipart (使用) urllib3

  • 这个 scrapy.utils.datatypes.MergeDict 对于python 3代码基,不推荐使用类。使用 ChainMap 相反。 (issue 3878

  • 这个 scrapy.utils.gz.is_gzipped 函数已弃用。使用 scrapy.utils.gz.gzip_magic_number 相反。

其他变化

Scrapy 1.6.0(2019-01-30)

亮点:

  • 更好的Windows支持;

  • Python 3.7兼容性;

  • 大的文档改进,包括从 .extract_first() + .extract() API到 .get() + .getall() 应用程序编程接口;

  • feed 导出、文件管道和媒体管道改进;

  • 更好的扩展性: item_errorrequest_reached_downloader 信号; from_crawler 支持Feed 导出、Feed 仓库和双过滤器。

  • scrapy.contracts 修复和新功能;

  • telnet控制台安全性改进,首次作为后端发布于 Scrapy 1.5.2(2019-01-22) ;

  • 清理弃用的代码;

  • 各种错误修复、小的新特性和整个代码库的可用性改进。

选择器API更改

虽然这些不是scrapy本身的更改,而是scrapy用于xpath/css选择器的parsel_u库中的更改,但这些更改在这里值得一提。Scrapy现在依赖于parsel>=1.5,并且Scrapy文档会更新以跟踪最近的 parsel API惯例。

最明显的变化是 .get().getall() 选择器方法现在比 .extract_first().extract() . 我们认为这些新方法会产生更简洁和可读的代码。见 extract()和extract_first()。 了解更多详细信息。

注解

目前有 no plans 贬低 .extract().extract_first() 方法。

另一个有用的新特性是 Selector.attribSelectorList.attrib 属性,这使得获取HTML元素的属性更加容易。见 选择元素属性 .

CSS选择器缓存在parsel>=1.5中,这使得在多次使用相同的css路径时更快。这是非常常见的情况下,剪贴蜘蛛:回调通常被称为多次,在不同的网页。

如果使用自定义 SelectorSelectorList 子类 backward incompatible Parsel中的更改可能会影响代码。见 parsel changelog 详细描述,以及完整的改进列表。

Telnet控制台

向后不兼容: Scrapy的telnet控制台现在需要用户名和密码。见 远程登录控制台 了解更多详细信息。此更改修复了 安全问题; 详细说明见 Scrapy 1.5.2(2019-01-22)

新的可扩展性功能

  • from_crawler 对Feed 导出和Feed仓库增加了支持。除此之外,它还允许从自定义饲料仓库和出口商访问零碎设置。( issue 1605issue 3348

  • from_crawler 对双过滤器增加了支持( issue 2956 );这允许从双面打印器访问设置或蜘蛛。

  • item_error 在管道中发生错误时激发( issue 3256;

  • request_reached_downloader 当下载程序收到新请求时激发;此信号可能有用,例如,对于自定义计划程序有用( issue 3393

  • 新建SiteMapSpider sitemap_filter() 方法,该方法允许根据SiteMapSpider子类中的属性选择站点地图条目( issue 3512

  • 下载程序处理程序的延迟加载现在是可选的;这使得在自定义下载程序处理程序中能够更好地处理初始化错误。( issue 3394

新的文件管道和媒体管道功能

scrapy.contracts 改进

  • 更好地处理合同代码中的异常( issue 3377;

  • dont_filter=True 用于合同请求,该请求允许使用相同的URL测试不同的回调( issue 3381;

  • request_cls 合同子类中的属性允许在合同中使用不同的请求类,例如FormRequest( issue 3383

  • 合同中的固定errback处理,例如,对于为返回非200响应的URL执行合同的情况( issue 3371

可用性改进

  • robotstxtmiddleware的更多统计信息( issue 3100

  • 信息日志级别用于显示telnet主机/端口( issue 3115

  • 在robotstxtmiddleware中将消息添加到ignorerequest( issue 3113

  • 更好地验证 url 论点 Response.followissue 3131

  • 当spider初始化出错时,从scray命令返回非零退出代码 (issue 3226

  • 链接提取改进:“ftp”添加到方案列表中( issue 3152 )将“flv”添加到常用视频扩展( issue 3165

  • 禁用导出程序时出现更好的错误消息( issue 3358;

  • scrapy shell --help 提到本地文件所需的语法( ./file.html - issue 3496 .

  • Referer header值添加到rfpdupefilter日志消息中( issue 3588

错误修复

  • 修复了Windows下.csv导出中多余空行的问题( issue 3039;

  • 在为磁盘队列序列化对象时正确处理python 3中的picking错误( issue 3082

  • 复制请求时标志现在被保留( issue 3342;

  • FormRequest.from_response clickdata不应忽略带有 input[type=image]issue 3153

  • FormRequest.from响应应保留重复的密钥( issue 3247

文档改进

折旧清除

1.0以前版本的 Scrapy 模块名称的兼容性垫片已移除( 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

有关详细信息见 模块重新定位 ,或使用Scrapy 1.5.x Deprecation Warnings中的建议更新代码。

其他折旧移除:

  • 已删除不推荐使用的scrapy.interfaces.ispIderManager;请使用scrapy.interfaces.ispIderLoader。

  • 已弃用 CrawlerSettings 类已删除( issue 3327

  • 已弃用 Settings.overridesSettings.defaults 属性被删除( issue 3327issue 3359

其他改进、清理

Scrapy 1.5.2(2019-01-22)

  • 安全修补程序: telnet控制台扩展可以很容易地被发布内容到http://localhost:6023的流氓网站利用,我们还没有找到从scrappy利用它的方法,但是很容易欺骗浏览器这样做,并提高了本地开发环境的风险。

    修复程序向后不兼容 ,默认情况下,它使用随机生成的密码启用telnet用户密码验证。如果不能立即升级,请考虑设置 TELNETCONSOLE_PORT 超出其默认值。

    有关详细信息的文档见 telnet console

  • 由于boto导入错误,GCE环境下的Backport CI构建失败。

Scrapy 1.5.1(2018-07-12)

这是一个包含重要错误修复的维护版本,但没有新功能:

Scrapy 1.5.0(2017-12-29)

这个版本在代码库中带来了一些新的小特性和改进。一些亮点:

  • 文件管道和ImageSpipeline支持Google云存储。

  • 随着到代理的连接现在可以重用,使用代理服务器进行爬行变得更加高效。

  • 对警告、异常和日志消息进行了改进,使调试更加容易。

  • scrapy parse 命令现在允许通过 --meta 参数。

  • 与python 3.6、pypy和pypy3的兼容性得到了改进;通过在CI上运行测试,pypy和pypy3现在得到了官方支持。

  • 更好地默认处理HTTP 308、522和524状态代码。

  • 像往常一样,文档得到了改进。

向后不兼容的更改

  • Scrapy1.5放弃了对python 3.3的支持。

  • 默认的scrapy用户代理现在使用https链接到scrapy.org( issue 2983 ) 这在技术上是向后不兼容的; 覆盖 USER_AGENT 如果你依赖旧的价值观。

  • 记录被覆盖的设置 custom_settings 是固定的; this is technically backward-incompatible 因为记录器从 [scrapy.utils.log][scrapy.crawler] . 如果您正在分析垃圾日志,请更新日志分析器( issue 1343

  • Linkextractor现在忽略 m4v 默认情况下,这是行为的更改。

  • 522和524状态代码添加到 RETRY_HTTP_CODESissue 2851

新特点

  • 支持 <link> 标签在 Response.followissue 2785

  • Support for ptpython REPL (issue 2654)

  • Google云存储支持文件管道和图像管道( issue 2923

  • 新的 --meta “scrapy parse”命令的选项允许传递附加请求。( issue 2883

  • 使用时填充spider变量 shell.inspect_responseissue 2812

  • 处理HTTP 308永久重定向( issue 2844

  • 将522和524添加到 RETRY_HTTP_CODESissue 2851

  • 启动时记录版本信息( issue 2857

  • scrapy.mail.MailSender 现在在python 3中工作(它需要Twisted17.9.0)

  • 重新使用与代理服务器的连接( issue 2743

  • 为下载器中间件添加模板( issue 2755

  • 未定义分析回调时NotImplementedError的显式消息( issue 2831

  • CrawlerProcess有一个选项可以禁用安装根日志处理程序( issue 2921

  • Linkextractor现在忽略 m4v 默认情况下的扩展

  • 更好地记录响应消息 DOWNLOAD_WARNSIZEDOWNLOAD_MAXSIZE 限制(限制) issue 2927

  • 当URL被放入时显示警告 Spider.allowed_domains 而不是域( issue 2250

错误修复

  • 修复由重写的设置的日志记录 custom_settingsthis is technically backward-incompatible 因为记录器从 [scrapy.utils.log][scrapy.crawler] ,因此如果需要,请更新日志分析器( issue 1343

  • 默认的scrapy用户代理现在使用https链接到scrapy.org( issue 2983 ) 这在技术上是向后不兼容的; 覆盖 USER_AGENT 如果你依赖旧的价值观。

  • 修复pypy和pypy3测试失败,正式支持它们( issue 2793issue 2935issue 2990issue 3050issue 2213issue 3048

  • 在下列情况下修复DNS解析程序 DNSCACHE_ENABLED=Falseissue 2811

  • 添加 cryptography for Debian Jessie tox test env (issue 2848)

  • 添加验证以检查请求回调是否可调用( issue 2766

  • 端口 extras/qpsclient.py 到Python 3(Python) issue 2849

  • 在python 3的场景下使用getfullargspec来停止取消预测警告( issue 2862

  • 更新不推荐使用的测试别名( issue 2876

  • 固定 SitemapSpider 支持备用链接( issue 2853

文档

  • 为添加了缺少的项目符号点 AUTOTHROTTLE_TARGET_CONCURRENCY 设置。( issue 2756

  • 更新贡献文档,记录新的支持渠道( issue 2762 ,问题:“3038”

  • 在文档中包含对Scrapy Subreddit的引用

  • 修复断开的链接;对外部链接使用https://( issue 2978issue 2982issue 2958

  • 文档CloseSpider扩展更好( issue 2759

  • 在MongoDB示例中( issue 2781 )使用 pymongo.collection.Collection.insert_one()

  • 拼写错误和打字错误( issue 2828issue 2837issue 2884issue 2924

  • 澄清 CSVFeedSpider.headers 文件编制( issue 2826

  • 文件 DontCloseSpider 例外和澄清 spider_idleissue 2791

  • 更新自述文件中的“releases”部分( issue 2764

  • 修正RST语法 DOWNLOAD_FAIL_ON_DATALOSS 文档库 issue 2763

  • StartProject参数描述中的小修复( issue 2866

  • 在response.body文档中澄清数据类型( issue 2922

  • 添加有关的注释 request.meta['depth'] 到DepthmIddleware文档( issue 2374

  • 添加有关的注释 request.meta['dont_merge_cookies'] to CookiesMiddleware docs (issue 2999)

  • 最新的项目结构示例( issue 2964issue 2976

  • Itemexporters用法的更好示例( issue 2989

  • 文件 from_crawler 蜘蛛和下载者中间商的方法( issue 3019

Scrapy 1.4.0(2017-05-18)

Scrapy1.4并没有带来那么多惊人的新功能,但还是有相当多的便利改进。

Scrappy现在支持匿名ftp会话,通过新的 FTP_USERFTP_PASSWORD 设置。如果您使用的是Twisted版本17.1.0或更高版本,那么ftp现在可用于python 3。

有一个新的 response.follow 创建请求的方法; 现在,它是一种推荐的在“ Scrapy 蜘蛛”中创建请求的方法。. 这种方法使得编写正确的spider更加容易; response.follow 与创建 scrapy.Request 直接对象:

  • 它处理相关的URL;

  • 它可以在非utf8页面上正确地使用非ASCII 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。**这让用户不时感到困惑,实际上浏览器并不是这样做的,因此我们删除了对提取链接的额外转换。

对于那些想要更多控制 Referer: 当跟踪链接时Scrapy发送的标题,您可以设置自己的 Referrer Policy . 在Scrapy 1.4之前,默认 RefererMiddleware 会简单而盲目地将其设置为生成HTTP请求的响应的URL(这可能会泄漏URL种子的信息)。默认情况下,scrappy现在的行为与常规浏览器非常相似。这个策略完全可以用W3C标准值定制(或者如果你愿意的话,可以用你自己定制的值)。见 REFERRER_POLICY 有关详细信息。

为了使scrappyspider更容易调试,scrappy在1.4中默认记录更多的统计信息:内存使用统计信息、详细的重试统计信息、详细的HTTP错误代码统计信息。类似的变化是,HTTP缓存路径现在也可以在日志中看到。

最后但同样重要的是,scrapy现在可以选择使用新的 FEED_EXPORT_INDENT 设置。

享受!(或继续阅读此版本中的其他更改。)

折旧和向后不兼容的变更

  • Default to canonicalize=False in scrapy.linkextractors.LinkExtractor (issue 2537, fixes issue 1941 and issue 1982): warning, this is technically backward-incompatible

  • 默认情况下启用memusage扩展( issue 2539 修正 issue 2187this is technically backward-incompatible 因此,请检查您是否有任何非违约行为 MEMUSAGE_*** 选项集。

  • EDITOR 环境变量现在优先于 EDITOR 在settings.py中定义的选项( issue 1829 );报废默认设置不再依赖于环境变量。 从技术上讲,这是一个前后不相容的变化.

  • 不推荐使用``Spider.make_requests_from_url``(:issue:1728,fixes:issue:1495)。

新特点

错误修复

  • Linkextractor现在从属性中去掉前导空格和尾随空格。( issue 2547 修正 issue 1614

  • Properly handle whitespaces in action attribute in FormRequest (issue 2548)

  • 从代理服务器缓冲连接响应字节,直到收到所有HTTP头( issue 2495 修正 issue 2491

  • FTP下载器现在可以在python 3上工作,前提是使用twisted>=17.1( issue 2599

  • 在解压缩内容后使用body选择响应类型( issue 2393 修正 issue 2145

  • 总是解压缩 Content-Encoding: gzipHttpCompressionMiddleware 阶段(阶段) issue 2391

  • 尊重自定义日志级别 Spider.custom_settingsissue 2581 修正 issue 1612

  • MacOS的“make htmlview”修复程序( issue 2661

  • 从命令列表中删除“命令”( issue 2695

  • 修复具有空正文的投递请求的重复内容长度头( issue 2677

  • 适当地取消大量下载,如上面所述 DOWNLOAD_MAXSIZEissue 1616

  • ImageSpipeline:使用调色板固定处理透明PNG图像( issue 2675

清理和重构

  • 测试:删除临时文件和文件夹 (issue 2570 ),修复了macOS上的ProjectUtilsTest (issue 2569 ),在Travis CI上使用portable pypy for Linux (issue 2710

  • 独立建筑请求 _requests_to_follow 爬行蜘蛛( issue 2562

  • 删除“python 3 progress”徽章( issue 2567

  • 再添加几行到 .gitignoreissue 2557

  • 删除BumpVersion预发布配置( issue 2159

  • 添加codecov.yml文件( issue 2750

  • 基于Twisted版本设置上下文工厂实现(:issue:2577,fixes:issue:2560

  • 添加省略 self 默认项目中间件模板中的参数( issue 2595

  • 删除冗余 slot.add_request() 调用ExecutionEngine( issue 2617

  • Catch more specific os.error exception in scrapy.pipelines.files.FSFilesStore (issue 2644)

  • 更改“localhost”测试服务器证书( issue 2720

  • 移除未使用的 MEMUSAGE_REPORT 设置( issue 2576

文档

  • 导出程序需要二进制模式( issue 2564 修正 issue 2553

  • 提及问题 FormRequest.from_response 由于lxml中的错误( issue 2572

  • 在模板中统一使用单引号( issue 2596

  • 文件 ftp_userftp_password 元密钥(元密钥) issue 2587

  • 关于弃用的``contrib /``(:issue:2636)的删除部分

  • 在Windows上安装Scrapy时推荐Anaconda(问题:2477,修复:问题:2475

  • 常见问题解答:在Windows上重写关于python 3支持的说明( issue 2690

  • 重新排列选择器节( issue 2705

  • 去除 __nonzero__SelectorList 文档 (issue 2683

  • 在文档中说明如何禁用请求筛选 DUPEFILTER_CLASS 设置( issue 2714

  • 在文档设置自述文件中添加sphinx_rtd_主题( issue 2668

  • 在json item writer示例中以文本模式打开文件( issue 2729

  • 澄清 allowed_domains 实例(例) issue 2670

Scrapy 1.3.3(2017-03-10)

错误修复

  • 制作 SpiderLoader 提升 ImportError 对于缺少依赖项和错误 SPIDER_MODULES . 从1.3.0开始,这些例外被作为警告而沉默。引入新的设置,以便在警告或异常(如果需要)之间切换;有关详细信息请参见 SPIDER_LOADER_WARN_ONLY

Scrapy 1.3.2(2017-02-13)

错误修复

  • 在转换为/从dicts(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``这样的事情。

  • 支持Kwargs response.xpath() 使用 XPath variables 和特殊名称空间声明;这至少需要Parselv1.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 2496issue 2528

  • 修复Python 3.6上的``scrapy.Item``继承(:issue:2511)。

  • Enforce numeric values for components order in SPIDER_MIDDLEWARES, DOWNLOADER_MIDDLEWARES, EXTENSIONS and SPIDER_CONTRACTS (issue 2420).

文档

  • 改写行为准则部分并升级到贡献者契约v1.4 (issue 2469

  • 澄清传递spider参数会将其转换为spider属性( issue 2483

  • 在``FormRequest.from_response()``(:issue:2497)上记录``formid``参数。

  • 向自述文件添加.rst扩展名( issue 2507

  • 提到级别数据库缓存存储后端( issue 2525

  • 使用 yield 在示例回调代码中( issue 2533

  • 添加有关HTML实体解码的说明 .re()/.re_first()issue 1704

  • 错别字(:问题:2512,:issue:2534,:issue:2531)。

清除

  • Remove redundant check in MetaRefreshMiddleware (issue 2542).

  • 在``LinkExtractor``中更快地检查允许/拒绝模式(:issue:2538)。

  • 删除支持旧Twisted版本的死代码(:issue:2544)。

Scrapy 1.3.0(2016-12-21)

这个版本出现在1.2.2之后不久,主要原因之一是:发现从0.18到1.2.2(包括)的版本使用了一些来自Twisted的反向端口代码( scrapy.xlib.tx.* ,即使有新的扭曲模块可用。现在使用的 twisted.web.clienttwisted.internet.endpoints 直接。(另请参见下面的清理。)

由于这是一个重大的变化,我们希望在不破坏任何使用1.2系列的项目的情况下,快速修复bug。

新特点

  • ``MailSender``现在接受单个字符串作为``to``和``cc``参数的值(:issue:2272

  • scrapy fetch urlscrapy shell urlfetch(url) 在Scrapy shell中,默认情况下遵循HTTP重定向 (issue 2290fetchshell 有关详细信息。

  • HttpErrorMiddleware 现在记录错误 INFO 级别而不是 DEBUG ;从技术上讲 backward incompatible 所以请检查您的日志分析器。

  • 默认情况下,记录器名称现在使用长格式路径,例如 [scrapy.extensions.logstats] 而不是先前版本(例如 [scrapy] 这是 backward incompatible 如果日志解析器需要短的logger name部分。您可以使用 LOG_SHORT_NAMES 设置为 True .

依赖关系和清理

  • Scrappy现在需要twisted>=13.1,这已经是许多Linux发行版的情况了。

  • 结果,我们摆脱了 scrapy.xlib.tx.* 模块,它复制了一些扭曲的代码,供用户使用“旧”的扭曲版本

  • ChunkedTransferMiddleware 已弃用并从默认的下载器中间软件中删除。

Scrapy 1.2.3(2017-03-03)

  • 打包修复:禁止在setup.py中支持不受支持的Twisted版本

Scrapy 1.2.2(2016-12-06)

错误修复

  • 修复管道上发生故障时的神秘回溯 open_spider()issue 2011

  • 修复嵌入的ipython外壳变量(修复 issue 396 重新出现在1.2.0中,固定在 issue 2418

  • 处理robots.txt时的几个补丁:

    • 处理(非标准)相对站点地图URL( issue 2390

    • 在python 2中处理非ASCII URL和用户代理( issue 2373

文档

  • 文件 "download_latency" 键入 Requestmeta DICT issue 2033

  • 从目录中删除Ubuntu包上的页面(已弃用且不受支持)( issue 2335

  • 一些固定的拼写错误(:issue:2346,:issue:2369,:issue:2369,:issue:2380)和澄清(:issue:2354,:issue:2325,:问题:2414

其他变化

  • 广告`conda-forge`_作为Scrapy的官方conda频道(:issue:2387

  • 尝试使用时出现更多有用的错误消息 .css().xpath() 关于非文本响应( issue 2264

  • startproject 命令现在生成一个示例 middlewares.py 文件(文件) issue 2335

  • 在``scrapy version`` verbose output(:issue:2404)中添加更多依赖项的版本信息

  • 全部删除 *.pyc 源分发中的文件( issue 2386

Scrapy 1.2.1(2016-10-21)

错误修复

  • 在建立TLS/SSL连接时包括OpenSSL更为允许的默认密码( issue 2314

  • 修复非ASCII URL重定向上的“位置”HTTP头解码( issue 2321

文档

其他变化

  • 从内置蜘蛛模板中的``start_urls``中删除了``www``(:issue:2299)。

Scrapy 1.2.0(2016-10-03)

新特点

  • 新的 FEED_EXPORT_ENCODING 用于自定义将项写入文件时使用的编码的设置。可用于关闭 \uXXXX 在JSON输出中进行转义。这对于那些希望XML或CSV输出使用UTF-8以外的东西的人也很有用。( issue 2034

  • startproject 命令现在支持一个可选的目标目录,以根据项目名称覆盖默认目录。( issue 2005

  • 新的 SCHEDULER_DEBUG 设置为日志请求序列化失败( issue 1610

  • JSON编码器现在支持序列化 set 实例(实例) issue 2058

  • 将``application / json-amazonui-streaming``解释为``TextResponse``(:issue:1503)。

  • scrapy 在使用shell工具时默认导入( shellinspect_responseissue 2248

错误修复

  • DefaultRequestHeaders中间件现在在useragent中间件之前运行( issue 2088 ) 警告:这在技术上是向后不兼容的, 尽管我们认为这是错误修复。

  • HTTP缓存扩展和使用 .scrapy 数据目录现在在项目外部工作( issue 1581 ) 警告:这在技术上是向后不兼容的, 尽管我们认为这是错误修复。

  • ``Selector``不允许再传递``response``和``text``(:issue:2153)。

  • 修复了错误回调名称的日志记录 scrapy parseissue 2169

  • 修复一个奇怪的gzip解压错误( issue 1606

  • 使用``CrawlSpider``时修复选定的回调:command:scrapy parse <parse>`(:issue:`2225)。

  • 修复蜘蛛不生成任何项时的无效JSON和XML文件( issue 872

  • 实施 flush() FPR StreamLogger 避免日志中出现警告( issue 2125

重构

测试和要求

Scrapy的新需求基线是Debian8“Jessie”。它以前是Ubuntu12.04精确版。实际上,这意味着我们至少要用这些(主要)包版本运行连续集成测试:twisted 14.0、pyopenssl 0.14、lxml 3.4。

Scrapy可以很好地处理这些包的旧版本(例如,代码库中仍然有用于旧的扭曲版本的开关),但不能保证(因为它不再被测试)。

文档

Scrapy 1.1.4(2017-03-03)

  • 打包修复:禁止在setup.py中支持不受支持的Twisted版本

Scrapy 1.1.3(2016-09-22)

错误修复

  • “ImagesPipeline”和“FilesPipeline”的子类的类属性与它们在1.1.1之前的作用相同(:issue:2243,fixes:issue:2198

文档

Scrapy 1.1.2(2016-08-18)

错误修复

  • 引入一个缺失:设置:`IMAGES_STORE_S3_ACL`设置,在将图像上传到S3时覆盖``ImagesPipeline``中的默认ACL策略(请注意,默认的ACL策略是“private”--而不是“public read”--因为scrapy 1.1.0)

  • :设置:`IMAGES_EXPIRES`默认值设置回90(回归在1.1.1中引入)

Scrapy 1.1.1(2016-07-13)

错误修复

  • 在连接请求到HTTPS代理中添加“主机”头( issue 2069

  • 使用响应 body 选择响应类时( issue 2001 修正 issue 2000

  • 不要使用错误的netlocs规范化URL(:issue:2038,fixes:issue:2010

  • 修复了``HttpCompressionMiddleware``(和``SitemapSpider``):

    • 不解码HEAD响应(:issue:2008,fixes:issue:1899

    • 在gzip内容类型标题中处理charset参数(:issue:2050,fixes:issue:2049

    • 不要解压缩gzip八位字节流响应(:issue:2065,fixes:issue:2063

  • 在针对IP地址主机验证证书时捕获(并忽略警告)异常(:issue:2094,fixes:issue:2092

  • 关于使用遗留类属性进行定制,使``FilesPipeline``和``ImagesPipeline``再次向后兼容(:issue:1989,fixes:issue:1985

新特点

  • 在项目文件夹外启用genspider命令( issue 2052

  • 重试HTTPS连接 TunnelError 默认情况下( issue 1974

文档

  • FEED_TEMPDIR 设置在词典编纂位置( commit 9b3c72c

  • 在概述中使用惯用的``.extract_first()``(:issue:1994

  • 在版权公告中的更新年份( commit c2c8036

  • 添加有关错误回复的信息和示例( issue 1995

  • 在下载器中间件示例中使用“url”变量( issue 2015

  • 语法修复(:问题:'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版本带来了许多有趣的功能和错误修复:

  • Scrapy 1.1支持beta python 3(需要twisted>=15.5)。更多细节和一些限制见 Beta Python 3 支持

  • 热门新功能:

    • 项目加载器现在支持嵌套加载器( issue 1467

    • FormRequest.from_response 改进( issue 1382issue 1137

    • 添加了设置:设置:AUTOTHROTTLE_TARGET_CONCURRENCY`和改进的AutoThrottle文档(:issue:`1324)。

    • 添加了``response.text``以将body作为unicode(:issue:1730)。

    • 匿名S3连接( issue 1358

    • 下载器中间件中的延迟( issue 1473 )这样可以更好地处理robots.txt( issue 1471

    • HTTP缓存现在更接近于RFC2616,增加了设置 HTTPCACHE_ALWAYS_STOREHTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLSissue 1151

    • 选择器被提取到Parsel_u库( issue 1409 )这意味着您可以使用没有scrapy的scrapy选择器,也可以在不需要升级scrapy的情况下升级选择器引擎。

    • 现在,HTTPS下载器默认情况下执行TLS协议协商,而不是强制使用TLS 1.0。您还可以使用新的 DOWNLOADER_CLIENT_TLS_METHOD .

  • 这些错误修复可能需要您注意:

    • 默认情况下不重试错误请求(HTTP 400)( issue 1289 )如果您需要旧的行为,请添加 400RETRY_HTTP_CODES .

    • 修复shell文件参数处理( issue 1710issue 1550 )如果你尝试 scrapy shell index.html 它将尝试加载URL http://index.html,使用 scrapy shell ./index.html 加载本地文件。

    • 现在,默认情况下,已为新创建的项目启用robots.txt遵从性( issue 1724 )Scrapy还将等待robots.txt下载,然后再继续爬行。( issue 1735 )如果要禁用此行为,请更新 ROBOTSTXT_OBEY 在里面 settings.py 创建新项目后的文件。

    • 导出器现在使用unicode,而不是默认的字节 (issue 1080 )如果你使用 PythonItemExporter ,您可能希望更新代码以禁用二进制模式,但现在已弃用该模式。

    • 接受包含点的XML节点名为有效( issue 1533

    • 将文件或图像上载到S3时(使用 FilesPipelineImagesPipeline )默认的acl策略现在是“private”而不是“public”**警告:向后不兼容!**你可以使用 FILES_STORE_S3_ACL 改变它。

    • 我们重新实施了 canonicalize_url() 以获得更正确的输出,尤其是包含非ASCII字符的URL (issue 1947 ). 这可能会改变链接提取器的输出相比以前的破烂版本。这也可能使您在1.1之前的运行中仍然存在的一些缓存项失效。 警告:向后不兼容! .

继续阅读以获取有关其他改进和错误修复的更多详细信息。

Beta Python 3 支持

我们一直在努力使Scrapy在Python 3上运行<https://github.com/scrapy/scrapy/wiki/Python-3-Porting>`_。 因此,现在您可以在Python 3.3,3.4和3.5上运行蜘蛛(需要Twisted> = 15.5)。 某些功能仍然缺失(有些功能可能永远不会被移植)。

几乎所有内置扩展/中间产品都可以工作。但是,我们知道Python3中的一些限制:

  • Scrapy不适用于使用python 3的Windows

  • 不支持发送电子邮件

  • 不支持ftp下载处理程序

  • 不支持telnet控制台

其他新功能和增强功能

弃用和移除

  • 补充 to_bytesto_unicode 蔑视 str_to_unicodeunicode_to_str 功能( issue 778

  • binary_is_text 介绍,以取代使用 isbinarytext (但返回值相反)( 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-json 作为 TextResponseissue 1333

  • 支持多值链接rel属性( issue 1201

  • 当有一个``<base>``标签(:issue:1564)时,修复了``scrapy.http.FormRequest.from_response``。

  • 修正:设置:TEMPLATES_DIR`处理(:issue:`1575)。

  • 各种各样 FormRequest 修复( issue 1595issue 1596issue 1597

  • 使 _monkeypatches 更健壮( issue 1634

  • 修复了``XMLItemExporter``中带有非字符串字段的错误(:issue:1738)。

  • 修正了macOS中的startproject命令 (issue 1635

  • 固定的 PythonItemExporter 和CSVExporter用于非字符串项类型 (issue 1737

  • 各种与日志相关的修复( issue 1294issue 1419issue 1263issue 1624issue 1654issue 1722issue 1726issue 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

  • DOC:支持Sphinx 1.4+(:issue:1893

  • 文档:选择器示例的一致性( issue 1869

Scrapy 1.0.5(2016-02-04)

  • FIX:[Backport]忽略LinkExtractors中的伪造链接(修复:问题:907,:commit:108195e

  • TST:更改了buildbot makefile以使用'pytest'(:commit:1f3d90a

  • 文档:修复了教程和媒体管道中的拼写错误( commit 808a9eacommit 803bd87

  • 文档:在设置文档中将ajaxcrawlMiddleware添加到下载器中间件库( commit aa94121

Scrapy 1.0.4(2015-12-30)

Scrapy 1.0.3(2015-08-11)

Scrapy 1.0.2(2015-08-06)

Scrapy 1.0.1(2015-07-01)

Scrapy 1.0.0(2015-06-19)

在这个主要版本中,您会发现许多新的特性和错误修复。确保检查我们的更新 overview 看看其中的一些变化,以及我们的刷 tutorial .

支持在spiders中返回字典

声明和返回 Scrapy 项目不再需要从您的蜘蛛收集抓取的数据,您现在可以返回显式字典。

经典版

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)

去年的谷歌夏季代码项目完成了一项重要的机制重新设计,用于填充设置,引入明确的优先级来覆盖任何给定的设置。作为该目标的扩展,我们为专门针对单个蜘蛛的设置提供了新的优先级,允许它们重新定义项目设置。

通过定义 custom_settings 蜘蛛中的类变量:

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

阅读有关设置填充的详细信息: 设置

Python 测井

Scrapy1.0已经从扭曲的日志记录转移到支持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')

阅读日志文档中的更多内容: 登录

爬虫API重构(GSOC 2014)

上一个谷歌夏季代码的另一个里程碑是对内部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可能会更改,直到达到稳定状态。

请参阅运行scrappy的脚本的更多示例: 常用做法

模块重新定位

为了改善 Scrapy 的总体结构,模块进行了大量的重新排列。主要的变化是将不同的子包分离成新的项目,并同时解散这两个项目。 scrapy.contribscrapy.contrib_exp 到顶级包中。内部重新定位之间保持向后兼容性,而导入不推荐使用的模块时会收到指示其新位置的警告。

重新定位的完整列表

外包包

注解

这些扩展进行了一些小的更改,例如更改了一些设置名称。请检查每个新存储库中的文档以熟悉新用法。

老位置

新位置

scrapy.commands.deploy

scrapyd-client (见其他备选方案: 部署蜘蛛

scrapy.contrib.djangoitem

scrapy-djangoitem

scrapy.webservice

scrapy-jsonrpc

scrapy.contrib_expscrapy.contrib 溶解

老位置

新位置

scrapy.contribexp.downloadermiddleware.解压缩

scrapy.downloadermiddleware.decompresson

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

设置重命名

老位置

新位置

SPIDER_MANAGER_CLASS

SPIDER_LOADER_CLASS

Changelog

新功能和增强功能

弃用和移除

  • 取消预测htmlparser链接提取程序( issue 1205

  • 从FeedExporter中删除已弃用的代码( issue 1155

  • 用于.15兼容性的剩余部分( issue 925

  • 放弃对每个蜘蛛并发请求的支持( issue 895

  • 删除旧的发动机代码( issue 911

  • 拆除SGMLLinkextractor( issue 777

重新定位

文档

错误修正

  • 项目多继承修复( issue 353issue 1228

  • ItemLoader.load_item:迭代字段副本( issue 722

  • 修复延迟(robotstxtmiddleware)中未处理的错误( issue 1131issue 1197

  • 强制读取下载超时为int( issue 954

  • scrapy.utils.misc.load_对象应打印完整的回溯( issue 902

  • 修复“.local”主机名的错误( issue 878

  • 修复已启用的扩展、中间软件、管道信息不再打印( issue 879

  • 修复在meta设置为false时不合并cookies的不良行为( issue 846

Python 3 进行中支持

  • 如果twisted.conch不可用,则禁用scrappy.telnet( issue 1161

  • 修复ajaxcrawl.py中的python 3语法错误( issue 1162

  • urllib的更多python3兼容性更改( issue 1121

  • 在Python3中,AssertItemSequal被重命名为AssertCountEqual。( issue 1070

  • 导入unittest.mock(如果可用)。( issue 1066

  • 更新了不推荐使用的cgi.parse_qsl以使用six的parse_qsl( issue 909

  • 防止python 3端口回归( issue 830

  • PY3:对python 3使用可变映射( issue 810

  • PY3:使用six.bytesio和six.moves.cstringio( issue 803

  • PY3:修复xmlrpclib和电子邮件导入( issue 801

  • PY3:使用6个用于robotparser和urlparse( issue 800

  • PY3:使用6.iterkeys、6.iteritems和tempfile( issue 799

  • PY3:fix有_键并使用six.moves.configparser( issue 798

  • PY3:使用six.moves.cpickle( issue 797

  • PY3使在python3中运行一些测试成为可能( issue 776

测验

  • 从PY3中删除不必要的行忽略( issue 1243

  • 在收集测试时修复来自pytest的剩余警告( issue 1206

  • 将文档生成添加到Travis( issue 1234

  • TST不从不推荐使用的模块收集测试。( issue 1165

  • 在测试中安装Service_Identity包以防止警告( issue 1168

  • 修复测试中不推荐使用的设置API( issue 1152

  • 使用post方法为WebClient添加测试,但未提供主体( issue 1089

  • py3-ignores.txt支持注释( issue 1044

  • 使一些主张现代化( issue 835

  • 选择器。重复测试( issue 779

代码重构

  • CSVFeedspider清理:使用迭代蜘蛛网输出( issue 1079

  • 从scrapy.utils.spider.iter_spider_输出中删除不必要的检查( issue 1078

  • 派送PEP8( issue 992

  • 已从walk_modules()中删除未使用的“load=false”参数( issue 871

  • 为了保持一致,请使用 job_dir 帮手 SpiderState 延伸。( issue 805

  • 将“sflo”局部变量重命名为不那么神秘的“log_observer”( issue 775

Scrapy 0.24.6(2015-04-20)

  • 使用py2下的unicode_转义对无效的xpath进行编码( commit 07cb3e5

  • 修复ipython shell作用域问题并加载ipython用户配置( commit 2c8e573

  • 修复文档中的小错误( commit d694019

  • 修复小错字(:commit:f92fa83

  • 在提取数据时已将sel.xpath()调用转换为response.xpath()。( commit c2c6d15

Scrapy 0.24.5(2015-02-25)

Scrapy 0.24.4(2014-08-09)

Scrapy 0.24.3(2014-08-09)

Scrapy 0.24.2(2014-07-08)

Scrapy 0.24.1(2014-06-27)

  • 修复不推荐使用的Crawlersettings并提高与.defaults属性的向后兼容性( commit 8e3f20a

Scrapy 0.24.0(2014-06-26)

增强功能

错误修正

  • 在regexlinkextractor中创建链接时编码unicode url值( issue 561

  • 忽略项加载器处理器中的无值( issue 556

  • 当sgmlinkxtractor和htmlparserlinkextractor中存在内部标记时修复链接文本( issue 485issue 574

  • 修复对已弃用类的子类的错误检查( issue 581issue 584

  • 处理由inspect.stack()失败引起的错误( issue 582

  • 修复对不存在的引擎属性的引用( issue 593issue 594

  • 修复类型()的动态项类示例用法( issue 603

  • 使用lucasdemarchi/codespell修复拼写错误( issue 628

  • 将sgmlinkextractor中attrs参数的默认值固定为tuple( issue 661

  • 修复站点地图阅读器中的XXE缺陷( issue 676

  • 修复引擎以支持筛选的启动请求( issue 707

  • 在没有主机名的URL上修复非现场中间件案例( issue 745

  • 测试套件不再需要PIL( issue 585

Scrapy 0.22.2(2014-02-14发布)

Scrapy 0.22.1(2014-02-08发布)

  • localhost666在某些情况下可以解决( commit 2ec2279

  • 测试检查。堆栈故障( commit cc3eda3

  • 当inspect.stack()失败时处理案例( commit 8cb44f9

  • 修复对已弃用类的子类的错误检查。关闭α581 commit 46d98d6

  • 文档:最终spider示例的4空间缩进( commit 13846de

  • 修复htmlparserlinktextractor并在485合并后进行测试( commit 368a946

  • BaseSgmlLinkExtractor:修复了链接具有内部标记时缺少的空间( commit b566388

  • BaseSgmlLinkExtractor: 添加带有内部标记的链接的单元测试( commit c1cb418

  • BaseSgmlLinkExtractor:修复了未知的_end tag(),以便在结束标记与开始标记匹配时只设置当前的_link=none( commit 7e4d627

  • 修复Travis CI构建的测试( commit 76c7e20

  • 用html实体替换不可编码的代码点。修复了562和285 (commit 5f87b17

  • Regexlinkextractor:创建链接时编码URL Unicode值( commit d0ee545

  • 用最新的输出更新了教程的爬行输出。( commit 8da65de

  • 使用爬虫引用更新了shell文档,并修复了实际shell输出。( commit 875b9ab

  • PEP8小编辑。( commit f89efaf

  • 暴露当前爬虫在破烂的外壳。 (commit 5349cec

  • 未使用的重新导入和PEP8小编辑。( commit 387f414

  • 使用itemloader时忽略none的值。( commit 0632546

  • Doc修复了默认值中的httpcache_存储错误,该默认值现在是filesystem而不是dbm。( commit cde9a8c

  • 将Ubuntu安装说明显示为文本代码 (commit fb5c9c5

  • 更新Ubuntu安装说明( commit 70fb105

  • 合并请求550来自Missist Leone/Patch-1( commit 6f70b6a

  • 修改scray Ubuntu包的版本 (commit 725900d

  • 确定0.22.0发布日期( commit af0219a

  • 修复news.rst中的拼写错误并删除(尚未发布)标题( commit b7f58f4

Scrapy 0.22.0(2014-01-17发布)

增强功能

  • [向后不兼容]将httpcachemiddleware后端切换到文件系统( issue 541 )还原旧的后端集 HTTPCACHE_STORAGEscrapy.contrib.httpcache.DbmCacheStorage

  • 使用connect方法的代理服务器https://urls( issue 392issue 397

  • 添加一个中间件来对由Google定义的Ajax可爬行页面进行爬行。( issue 343

  • 将scrapy.spider.basespider重命名为scrapy.spider.spider( issue 510issue 519

  • 选择器默认注册exslt命名空间( issue 472

  • 统一与选择器重命名类似的项加载器( issue 461

  • 制作 RFPDupeFilter 类容易子类化( issue 533

  • 提高测试覆盖率和即将推出的python 3支持( issue 525

  • 将设置和中间件的启动信息提升到信息级别( issue 520

  • 支持部分 get_func_args 乌蒂尔 issue 506 ,问题:“504”

  • 允许通过毒物进行单独测试 (issue 503

  • 链接提取程序忽略了更新扩展( issue 498

  • 添加中间件方法以获取文件/图像/拇指路径( issue 490

  • 改进非现场中间件测试( issue 478

  • 添加一种跳过由refermiddleware设置的默认referer头的方法( issue 475

  • 请勿发送 x-gzip 默认情况下 Accept-Encoding 报头( issue 469

  • 支持使用设置定义HTTP错误处理( issue 466

  • 使用现代的python习惯用法,无论你在哪里找到遗产( issue 497

  • 改进和更正文档( issue 527issue 524issue 521issue 517issue 512issue 505issue 502issue 489issue 465issue 460issue 425issue 536

修正

  • 更新Crawlspiper模板中的选择器类导入( issue 484

  • 修复不存在的引用 engine.slotsissue 464

  • 不要试图在非TextResponse实例上调用``body_as_unicode()``(:issue:462

  • 在XpathitemLoader子类化时发出警告,以前它只在实例化时发出警告。( issue 523

  • 在XpathSelector子类化时发出警告,以前它只在实例化时发出警告。( issue 537

  • 对内存状态的多个修复( issue 531issue 530issue 529

  • 修复中的重写URL FormRequest.from_response()issue 507

  • 在PIP 1.5下修复测试运行程序( issue 513

  • 修复spider名称为unicode时的日志记录错误( issue 479

Scrapy 0.20.2(2013-12-09发布)

Scrapy 0.20.1(2013-11-28发布)

  • 包含u软件包u从发布的源代码构建车轮需要数据( commit 5ba1ad5

  • 进程并行正在泄漏内部延迟的故障。关闭α458 commit 419a780

Scrapy 0.20.0(2013-11-08发布)

增强功能

  • 新选择器的API,包括CSS选择器( issue 395issue 426

  • 请求/响应URL/主体属性现在是不可变的(修改它们已经被弃用了很长时间)

  • ITEM_PIPELINES 现在定义为dict(而不是列表)

  • SitemapSpider可以获取备用URL( issue 360

  • Selector.remove_namespaces() 现在从元素的属性中移除名称空间。( issue 416

  • 为python 3.3铺平道路+( issue 435issue 436issue 431issue 452

  • 使用具有嵌套支持的本机python类型的新项导出器( issue 366

  • 调整http1.1池大小,使其与设置定义的并发性匹配( commit b43b5f575

  • scrappy.mail.mailsender现在可以通过tls连接或使用starttls升级( issue 327

  • 从ImageSpipeline中分解出功能的新文件管道( issue 370issue 409

  • 建议用枕头代替PIL来处理图像( issue 317

  • 为Ubuntu Quantal和Raring添加了Debian包 (commit 86230c0

  • 模拟服务器(用于测试)可以侦听HTTPS请求( issue 410

  • 从多个核心组件上拆下多个十字轴支架( issue 422issue 421issue 420issue 419issue 423issue 418

  • Travis CI现在根据开发版本测试 Scrapy 更改 w3libqueuelib python包。

  • 将PYPY 2.1添加到持续集成测试中( commit ecfa7431

  • Pylinted、pep8并从源中删除了旧样式异常( issue 430issue 432

  • 将importlib用于参数导入( issue 445

  • 处理python 2.7.5中引入的影响xmlItemExporter的回归( issue 372

  • 修正了SIGINT上的爬行关闭( issue 450

  • 不提交 reset 在FormRequest.From响应中键入输入( commit b326b87

  • 当请求errback引发异常时,不要消除下载错误( commit 684cfc0

错误修正

其他

  • 删除Python 2.6支持(:issue:448

  • 添加 cssselect python包作为安装依赖项

  • 删除libxml2和多选择器的后端支持, lxml 从现在开始是必需的。

  • 最小扭曲版本增加到10.0.0,下降扭曲8.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(2013-10-10发布)

  • IPython拒绝更新命名空间。FixY 396 commit 3d32c4f

  • 修复alreadycallederror替换shell命令中的请求。关闭α407 commit b1d8919

  • 修复启动请求延迟和提前挂起( commit 89faf52

Scrapy 0.18.3(2013-10-03发布)

Scrapy 0.18.2(2013-09-03发布)

  • 后端 scrapy check 命令修复和向后兼容的多爬虫进程( issue 339

Scrapy 0.18.1(2013-08-27发布)

  • 删除由cherry-picked更改添加的额外导入( commit d20304e

  • 在twisted pre 11.0.0下修复爬行测试( commit 1994f38

  • pY26不能格式化零长度字段( commit abf756f

  • 测试未绑定响应的潜在数据丢失错误( commit b15470d

  • 将没有内容长度或传输编码的响应视为良好响应( commit c4bf324

  • 如果未启用http11处理程序,则不包括responsefailed( commit 6cbe684

  • 新的HTTP客户端在ResponseFiled异常中包装连接丢失。修复373 (commit 1a20bba

  • 限制Travis CI构建矩阵( commit 3b01bb8

  • 合并请求375来自Peterarenot/Patch-1( commit fa766d7

  • 已修复,因此它引用了正确的文件夹( commit 3283809

  • 添加了Quantal&Raring来支持Ubuntu版本 (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(2013-08-09发布)

  • 使用tox对testsuite运行进行了很多改进,包括在pypi上进行测试的方法

  • 处理Ajax可爬行URL的get参数( commit 3fe2a32

  • 使用lxml recover选项分析站点地图( issue 347

  • 错误修复cookie按主机名而不是按netloc合并( issue 352

  • 支持禁用 HttpCompressionMiddleware 使用标志设置( issue 359

  • 使用支持XML命名空间 iternodes 语法分析器 XMLFeedSpiderissue 12

  • 支持 dont_cache 请求元标志( issue 19

  • 修正错误 scrapy.utils.gz.gunzip 被python 2.7.4中的更改打断( commit 4dc76e

  • 错误修复上的URL编码 SgmlLinkExtractorissue 24

  • 修正错误 TakeFirst 处理器不应丢弃零(0)值( issue 59

  • 支持XML导出器中的嵌套项( issue 66

  • 提高cookie处理性能( issue 77

  • 记录重复筛选的请求一次( issue 105

  • 将重定向中间件拆分为状态中间件和基于元的中间件( issue 78

  • 使用http1.1作为默认的下载程序处理程序( issue 109issue 318

  • 支持上的XPath表单选择 FormRequest.from_responseissue 185

  • 修正上的Unicode解码错误 SgmlLinkExtractorissue 199

  • Pypi解释器上的错误修复信号调度( issue 205

  • 改进请求延迟和并发处理( issue 206

  • 将rfc2616缓存策略添加到 HttpCacheMiddlewareissue 212

  • 允许自定义引擎记录的消息( issue 214

  • 多方面的改进 DjangoItemissue 217issue 218issue 221

  • 使用SETUPTOOLS入口点扩展 Scrapy 命令( issue 260

  • 允许蜘蛛``allowed_domains``值设置/元组(:issue:261

  • 支持 settings.getdictissue 269

  • 简化内部 scrapy.core.scraper 插槽处理 issue 271

  • 补充 Item.copyissue 290

  • 收集空闲下载器插槽( issue 297

  • 添加 ftp:// 方案下载程序处理程序( issue 329

  • 添加了Downloader Benchmark Web服务器和Spider工具 标杆管理

  • 已将永久(磁盘上)队列移动到单独的项目 (queuelib) 现在要看哪一个了

  • 使用外部库添加垃圾命令 (issue 260

  • 补充 --pdb 选择权 scrapy 命令行工具

  • 补充 XPathSelector.remove_namespaces 它允许从XML文档中删除所有名称空间以方便(使用不含名称空间的xpaths)。记录在 选择器 .

  • 蜘蛛合约的几个改进

  • 名为metarefreshmiddldeware的新默认中间件,用于处理meta refresh html标记重定向,

  • MetaRefreshMiddlDeware和RedirectMiddleware有不同的优先级来解决62

  • 从爬虫方法添加到蜘蛛

  • 使用模拟服务器添加系统测试

  • macOS兼容性的更多改进(感谢Alex Cepoi)

  • 多个单件清洁和多蜘蛛支持(感谢Nicolas Ramirez)

  • 支持自定义下载插槽

  • 在“shell”命令中添加了--spider选项。

  • 当scray启动时记录重写的设置

感谢所有为这次发布做出贡献的人。以下是按提交次数排序的参与者列表:

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(2013-05-30发布)

  • 当Scrapy deploy重定向到新端点时遵守请求方法 (commit 8c4fcee

  • 修复不准确的下载器中间件文档。参考文献280 commit 40667cb

  • 文档:删除diveintopython.org的链接,该链接不再可用。关闭α246 commit bd58bfa

  • 在无效的HTML5文档中查找表单节点( commit e3d6945

  • 修正了错误的标签属性类型bool而不是list( commit a274276

Scrapy 0.16.4(2013-01-23发布)

  • 修复文档中的拼写错误( commit 6d2b3aa

  • 添加关于禁用扩展的文档。参考文献132 commit c90de33

  • 已修复错误消息格式。log.err()不支持酷格式,出现错误时,消息为:“错误:错误处理%(item)s”( commit c16150c

  • 整理和改进图像管道错误记录( commit 56b45fc

  • 固定文档错误( commit 243be84

  • 添加文档主题:广泛的爬网和常见做法 (commit 1fbb715

  • 修复Scrapy parse命令中未显式指定spider时的错误。关闭#209 (commit c72e682

  • 更新docs/topics/commands.rst( commit 28eac7a

Scrapy 0.16.3(2012-12-07发布)

  • 在使用下载延迟时删除并发限制,并仍然确保强制执行请求间延迟( commit 487b9b5

  • 当图像管道失败时添加错误详细信息( commit 8232569

  • 提高macOS兼容性 (commit 8dcf8aa

  • setup.py:使用readme.rst填充long_描述( commit 7b5310d

  • 文档:删除了对ClientForm的过时引用( commit 80f9bb6

  • 为默认存储后端更正文档( commit 2aa491b

  • 文档:从常见问题解答中删除了断开的proxyhub链接( commit bdf61c4

  • SpiderOpenCloseLogging示例中的固定文档拼写错误( commit 7184094

Scrapy 0.16.2(2012-11-09发布)

Scrapy 0.16.1(2012-10-26发布)

  • 修复了logstats扩展,它在0.16版本之前的错误合并后被破坏。( commit 8c780fd

  • 更好地向后兼容scrapy.conf.settings( commit 3403089

  • 有关如何从扩展访问爬虫统计信息的扩展文档( commit c4da0b5

  • 删除了.hgtag(由于Scrapy使用git,不再需要) (commit d52c188

  • 固定RST标题下的破折号( commit fa4f7f9

  • 在新闻中设置0.16.0的发布日期( commit e292246

Scrapy 0.16.0(2012-10-18发布)

零星变化:

  • 补充 蜘蛛合约 以正式/可复制的方式测试蜘蛛的机制

  • 增加选项 -o-trunspider 命令

  • 文件化的 AutoThrottle 扩展 并添加到默认安装的扩展。您仍然需要启用它 AUTOTHROTTLE_ENABLED

  • 主要统计数据收集重构:删除全局/每个蜘蛛统计数据的分离,删除与统计数据相关的信号( stats_spider_opened 等)。统计信息现在要简单得多,在统计信息收集器API和信号上保持向后兼容性。

  • 补充 process_start_requests() 蜘蛛中间商的方法

  • 信号掉了。现在应该可以通过爬虫信号属性。有关更多信息,请参阅信号文档。

  • 删除了统计收集器singleton。现在可以通过crawler.stats属性访问状态。有关详细信息,请参阅统计信息收集文档。

  • 文件化的 核心API

  • lxml is now the default selectors backend instead of libxml2

  • 将formRequest.from_response()移植到 lxml 而不是 ClientForm

  • 删除的模块: scrapy.xlib.BeautifulSoupscrapy.xlib.ClientForm

  • SiteMapSpider:添加了对以.xml和.xml.gz结尾的站点地图URL的支持,即使它们公布了错误的内容类型( commit 10ed28b

  • Stacktracedump扩展:同时转储trackref活动引用( commit fe2ce93

  • 现在JSON和JSONLINES导出器完全支持嵌套项

  • 补充 cookiejar 请求meta-key以支持每个spider的多个cookie会话

  • 去耦编码检测码 w3lib.encoding 并移植了一些垃圾代码以使用该模块

  • 放弃了对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)

  • 已删除(未记录) HTMLImageLinkExtractor 类从 scrapy.contrib.linkextractors.image

  • 根据蜘蛛设置删除(替换为实例化多个爬行器对象)

  • USER_AGENT 蜘蛛属性将不再工作,请使用 user_agent 改为属性

  • DOWNLOAD_TIMEOUT 蜘蛛属性将不再工作,请使用 download_timeout 改为属性

  • 删除了``ENCODING_ALIASES``设置,因为编码自动检测已移至`w3lib`_库

  • 升级:ref:`topics-djangoitem`到main contrib

  • LogFormatter方法现在返回dicts(而不是字符串)以支持延迟格式化(:issue:164,:commit:dcef7b0

  • 下载程序处理程序 (DOWNLOAD_HANDLERS 设置)现在接收设置作为 __init__ 方法

  • 已将内存使用率替换为(更便携) resource 移除模块 scrapy.utils.memory 模块

  • 删除信号: scrapy.mail.mail_sent

  • 删除``TRACK_REFS``设置,现在:ref:`trackrefs <topics-leaks-trackrefs>`总是被启用

  • DBM现在是HTTP缓存中间件的默认存储后端

  • 日志消息的数量(每个级别)现在通过 Scrapy 统计(stat name: log_count/LEVEL

  • 接收到的响应数现在通过scrapy stats(stat name: response_received_count

  • 删除了``scrapy.log.started``属性

Scrapy 0.14.4

  • 为支持的Ubuntu发行版添加了precise (commit b7e46df

  • 修复了在https://groups.google.com/forum/中报告的json-rpc-webservice中的错误!主题/垃圾用户/QGVBMFYBNAQ/讨论。也从extras/scrapy-ws.py中删除了不再支持的“run”命令( commit 340fbdb

  • 内容类型http equiv的元标记属性可以是任意顺序。(123) commit 0cb68af

  • 将“导入图像”替换为更标准的“从PIL导入图像”。关闭α88 commit 4d17048

  • 将试用状态返回为bin/runtests.sh exit值。(118) commit b7b2e7f

Scrapy 0.14.3

  • 忘记包含PyDispatch许可证。(118) commit fd85f9c

  • 包括testsuite在源分发中使用的egg文件。(118) commit c897793

  • 更新项目模板中的docstring以避免与genspider命令混淆,这可能被视为高级功能。参考文献107 commit 2548dcc

  • 在docs/topics/firebug.rst中添加了关于关闭google目录的注释( commit 668e352

  • 空的时候不要丢弃插槽,只需保存在另一个dict中,以便在需要时循环使用。 (commit 8e9f607

  • 在支持libxml2的选择器中处理unicode xpaths不会失败( commit b830e95

  • 修正了请求对象文档中的小错误( commit bf3c9ee

  • 修复了链接提取器文档中的次要缺陷( commit ba14f38

  • 在scray中删除了一些与sqlite支持相关的过时代码 (commit 0665175

Scrapy 0.14.2

  • 在计算校验和之前,移动指向文件开头的缓冲区。参考文献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

  • Catch start_请求迭代器错误。参考文献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 doc(:commit:8bf19e6)的格式

  • 为所有正在运行的线程转储堆栈并修复StackTraceDump扩展转储的引擎状态( commit 14a8e6e

  • 添加了关于为什么我们在boto图像上传上禁用SSL的注释( commit 5223575

  • 当与S3进行太多并行连接时,SSL握手挂起( commit 63d583d

  • 更改教程以跟踪dmoz网站上的更改( commit bcb3198

  • 避免在Twisted中出现断开连接的deferred attributeerror异常>=11.1.0( commit 98f3f87

  • 允许spider设置autothrottle最大并发性( commit 175a4b5

Scrapy 0.14

新功能和设置

  • 支持 AJAX crawleable urls

  • 在磁盘上存储请求的新的永久性计划程序,允许挂起和恢复爬网( r2737

  • 在``scrapy crawl``中添加了``-o``选项,这是将已删除项目转储到文件中的快捷方式(或使用``-``标准输出)

  • 添加了对自定义设置传递给Scrapyd``recation.json`` api(:rev:2779,:rev:2783)的支持

  • 新的 ChunkedTransferMiddleware (默认启用)以支持 chunked transfer encoding (r2769)

  • 添加对S3下载器处理程序的boto 2.0支持( r2763

  • 补充 marshal to formats supported by feed exports (r2744)

  • 在请求错误回复中,有问题的请求现在接收到 failure.request 属性(属性) r2738

  • 大下载重构以支持每个域/IP并发限制( r2732
  • 添加了内置缓存DNS解析程序( r2728

  • 将与Amazon AWS相关的组件/扩展(sqs spider queue,simpledb stats collector)移动到单独的项目:[scaws](https://github.com/scrapinghub/scaws)( r2706r2714

  • 已将spider队列移动到scrapyd: scrapy.spiderqueue > scrapyd.spiderqueuer2708

  • 已将sqlite utils移动到scrapyd: scrapy.utils.sqlite > scrapyd.sqliter2781

  • 对返回迭代器的真正支持 start_requests() 方法。当蜘蛛空闲时,迭代器现在在爬行过程中被消耗。( r2704

  • 补充 REDIRECT_ENABLED 快速启用/禁用重定向中间件的设置( r2697

  • 补充 RETRY_ENABLED 设置为快速启用/禁用重试中间件( r2694

  • 补充 CloseSpider 手动关闭星形齿轮的例外情况( r2691

  • 通过添加对HTML5元字符集声明的支持来改进编码检测( r2690

  • 重构CloseSpider行为,等待所有下载完成并由Spider处理,然后关闭Spider( r2688

  • 补充 SitemapSpider (见Spiders页面中的文档)( r2658

  • 补充 LogStats 用于定期记录基本统计信息(如已爬网页和已擦除项)的扩展( r2657

  • 使gzipped响应的处理更加可靠(319, r2643 )现在,scrappy将尝试尽可能多地从gzip响应中解压缩,而不是使用 IOError .

  • 简化!memoryDebugger扩展,用于转储内存调试信息( r2639

  • 添加了编辑蜘蛛的新命令:scrapy edit``(:rev:`2636`)和-e``标志到``genspider``命令使用它(:rev:2653

  • 将项目的默认表示更改为精美打印的dicts。(启:2631)。 对于Scraped和Dropped行,在默认情况下使日志更具可读性,从而改进了默认日志记录。

  • 补充 spider_error 信号(信号) r2628

  • 补充:设置:COOKIES_ENABLED`设置(:rev:`2625

  • 现在,Stats被转储到Scrapy日志中(默认值:setting:`STATS_DUMP`设置已更改为“True”。)。 这是为了让Scrapy用户更加了解Scrapy统计数据以及在那里收集的数据。

  • 增加了对动态调整下载延迟和最大并发请求的支持( r2599

  • 添加了新的DBM HTTP缓存存储后端( r2576

  • 补充 listjobs.json API到ScrapyDy( r2571

  • CsvItemExporter:添加了``join_multivalued``参数(:rev:2578

  • 为``xmliter_lxml``添加名称空间支持(:rev:2552

  • 改进了cookies中间件 COOKIES_DEBUG 更好的记录它( r2579

  • 对Scrapyd和Link提取器的一些改进

重新排列和删除代码

  • 合并的项传递和项抓取概念,因为它们在过去常常被证明是混淆的。这意味着: r2630
    • 原始item_scraped信号已被删除

    • 原始item_passed信号已重命名为item_scraped

    • 旧的日志行``Scraped Item ...``被删除了

    • 旧的日志行``通过的项目......``被重命名为``Scraped Item ...``行并降级为``DEBUG``级别

  • 通过将部分废弃代码分为两个新库来减少废弃代码库:
    • w3lib`_(来自``scrapy.utils。{http,markup,multipart,response,url}``的几个函数,完成于:rev:`2584

    • scrapely`_(是``scrapy.contrib.ibl`,完成于:rev:2586

  • 删除了未使用的功能: scrapy.utils.request.request_info()r2577

  • 已从中删除googledir项目 examples/googledir . 现在有一个新的示例项目叫做 dirbot 在GitHub上提供:https://github.com/scray/dirbot

  • 删除了对Scrapy项目中默认字段值的支持(:rev:2616

  • 删除了实验crawlspider v2(:rev:2632

  • 删除了调度程序中间件以简化体系结构。重复过滤器现在在调度程序本身中完成,使用与以前相同的重复过滤类。( DUPEFILTER_CLASS 设置) r2640

  • 已删除对将URL传递到的支持 scrapy crawl 命令(使用) scrapy parse 取而代之的是) r2704

  • 已删除不推荐使用的执行队列( r2704

  • 已删除(未记录)spider上下文扩展(来自scrapy.contrib.spiderContext)( r2780

  • 删除``CONCURRENT_SPIDERS``设置(改用scrapyd maxproc)(:rev:2789

  • 重命名核心组件的属性:downloader.sites - > downloader.slots,scraper.sites - > scraper.slots(:rev:2717,:rev:2718

  • 将设置``CLOSESPIDER_ITEMPASSED``重命名为:setting:CLOSESPIDER_ITEMCOUNT`(:rev:`2655)。 保持向后兼容性。

Scrapy 0.12

旧问题追踪器(trac)中的nnn参考票等数字不再可用。

新功能和改进

  • 传递的项现在发送到 item 论证 item_passed (273)

  • 向添加了详细选项 scrapy version 命令,用于错误报告(298)

  • HTTP缓存现在默认存储在项目数据目录中(279)

  • 增加了项目数据存储目录(276,277)

  • Scrapy 项目的文档结构(见命令行工具文档)

  • XPath选择器的新lxml后端(147)

  • 每个蜘蛛设置(245)

  • 支持退出代码,以在scrapy命令中发出错误信号(248)

  • 补充 -c 参数 scrapy shell 命令

  • 制造 libxml2 可选择的(第260)

  • 新的 deploy 命令(第261)

  • 补充 CLOSESPIDER_PAGECOUNT 设置(α253)

  • 补充 CLOSESPIDER_ERRORCOUNT 设置(α254)

抓取变化

  • ScrapyD现在每个蜘蛛使用一个进程

  • 它为每个蜘蛛运行存储一个日志文件,并将其旋转以保持每个蜘蛛最新的5个日志(默认情况下)

  • 添加了一个最小的Web UI,默认情况下可从http://localhost:6800获得

  • 现在有一个 scrapy server 启动当前项目的ScrapyD服务器的命令

对设置的更改

  • 补充 HTTPCACHE_ENABLED 设置(默认为false)以启用HTTP缓存中间件

  • 改变 HTTPCACHE_EXPIRATION_SECS 语义:现在零意味着“永不过期”。

弃用/废弃功能

  • 已弃用 runserver 有利于…的命令 server 启动ScrapyD服务器的命令。另请参见:ScrapyD更改

  • 已弃用 queue 有利于使用ScrapyD的命令 schedule.json 应用程序编程接口。另请参见:ScrapyD更改

  • 移除了!lxmlitemloader(从未升级到主控件的实验控件)

Scrapy 0.10

旧问题追踪器(trac)中的nnn参考票等数字不再可用。

新功能和改进

  • 新的Scrapy服务称为``scrapyd``,用于在生产中部署Scrapy爬虫(#218)(可用文档)

  • 简化的图像管道使用,现在无需对自己的图像管道进行子类化(217)

  • Scrapy Shell现在默认显示Scrapy日志(206)

  • 重构公共基本代码中的执行队列和称为“spider队列”的可插拔后端(220)

  • 新的持久蜘蛛队列(基于sqlite)(198),默认情况下可用,允许在服务器模式下启动scrappy,然后安排蜘蛛运行。

  • 添加了scrapy命令行工具及其所有可用子命令的文档。(提供文件)

  • 具有可插拔后端的Feed exporters(197)(提供文档)

  • 延迟信号(193)

  • 向item pipeline open_spider()添加了两个新方法,使用延迟支持关闭_spider()(195)

  • 支持覆盖每个spider的默认请求头(181)

  • 将默认的spider管理器替换为具有类似功能但不依赖于双绞线插件的管理器(186)

  • 将Debian包拆分为两个包-库和服务(187)

  • Scrapy日志重构(#188)

  • 在不同的运行中保持持久的蜘蛛上下文的新扩展(203)

  • 补充 dont_redirect 避免重定向的request.meta键(233)

  • 补充 dont_retry 用于避免重试的request.meta密钥(234)

命令行工具更改

  • 新的 scrapy 替换旧命令的命令 scrapy-ctl.py (199)-只有一个全局 scrapy 现在命令,而不是一个 scrapy-ctl.py 每个项目-已添加 scrapy.bat 用于从Windows更方便地运行的脚本

  • 将bash完成添加到命令行工具(210)

  • 重命名命令 startrunserver (209)

API更改

  • urlbody 请求对象的属性现在是只读的(230)

  • Request.copy()Request.replace() 现在也复制他们的 callbackerrback 属性(231)

  • 从``scrapy.contrib``中删除了``UrlFilterMiddleware``(默认情况下已禁用)

  • 非现场中间件不会过滤发出任何来自没有ALLOW_DOMAINS属性的爬行器的请求(#225)

  • 删除蜘蛛管理器 load() 方法。现在蜘蛛被装载在 __init__ 方法本身。

  • 对Scrapy Manager(现在称为“crawler”)的更改:
    • scrapy.core.manager.ScrapyManager class renamed to scrapy.crawler.Crawler

    • scrapy.core.manager.scrapymanager singleton moved to scrapy.project.crawler

  • 移动模块: scrapy.contrib.spidermanagerscrapy.spidermanager

  • 蜘蛛管理器单例从``scrapy.spider.spiders``移动到``scrapy.project.crawler``单例的``spiders`属性。

  • 已移动的统计信息收集器类:(204)
    • scrapy.stats.collector.StatsCollector to scrapy.statscol.StatsCollector

    • scrapy.stats.collector.SimpledbStatsCollector to scrapy.contrib.statscol.SimpledbStatsCollector

  • 默认的每个命令设置现在在 default_settings 命令对象类的属性(201)

  • 已更改项管道的参数 proce将Item管道``process_item()``方法的参数从``(spider,item)``改为``(item,spider)
    • 保持向后兼容性(带有反预测警告)

  • 将``scrapy.core.signals``模块移到``scrapy.signals``
    • 保持向后兼容性(带有反预测警告)

  • 将``scrapy.core.exceptions``模块移动到``scrapy.exceptions``
    • 保持向后兼容性(带有反预测警告)

  • 将``handles_request()``类方法添加到``BaseSpider``

  • 删掉``scrapy.log.exc()``函数(使用``scrapy.log.err()``代替)

  • 删除``scrapy.log.msg()``函数的``component``参数

  • 删除了``scrapy.log.log_level``属性

  • 在Spider Manager和Item Pipeline Manager中添加了``from_settings()``类方法

对设置的更改

  • 添加了``HTTPCACHE_IGNORE_SCHEMES``设置以忽略某些方案!HttpCacheMiddleware(#225)

  • 添加了``SPIDER_QUEUE_CLASS``设置,定义了要使用的蜘蛛队列(#220)

  • 补充 KEEP_ALIVE 设置(α220)

  • 删除了``SERVICE_QUEUE``设置(#220)

  • 移除了 COMMANDS_SETTINGS_MODULE 设置(α201)

  • 将``REQUEST_HANDLERS``重命名为``DOWNLOAD_HANDLERS``并制作下载处理程序类(而不是函数)

Scrapy 0.9

旧问题追踪器(trac)中的nnn参考票等数字不再可用。

新功能和改进

  • 向scrappy.mail添加了smtp-auth支持

  • 添加的新设置: MAIL_USERMAIL_PASSr2065 (149)

  • 添加了新的scrapy-ctl视图命令 - 在浏览器中查看URL,如Scrapy所见(:rev:2039

  • 添加了用于控制Scrapy进程的Web服务(这也会取消Web控制台的支持)。( r2053 (167)

  • 支持将Scrapy作为服务运行,用于生产系统( r1988r2054r2055r2056r2057 (168)

  • 添加了包装感应库(文档目前仅在源代码中可用)。( r2011

  • 简化和改进的响应编码支持( r1961r1969

  • 补充 LOG_ENCODING 设置( r1956 ,文档可用)

  • 补充 RANDOMIZE_DOWNLOAD_DELAY 设置(默认启用)( r1923 ,文档可用)

  • MailSender 不再是IO阻塞( r1955 (146)

  • Linkextractor和新的Crawlspider现在处理相对的基标记URL( r1960 (148)

  • 项目加载器和处理器的几个改进( r2022r2023r2024r2025r2026r2027r2028r2029r2030

  • 增加了对向telnet控制台添加变量的支持( r2047 (165)

  • 支持不带回调的请求( r2050 (166)

API更改

  • 将``Spider.domain_name``改为``Spider.name``(SEP-012,:rev:1975

  • Response.encoding 现在是检测到的编码( r1961

  • HttpErrorMiddleware 现在不返回任何值或引发异常( r2006 (157)

  • scrapy.command 模块重新定位( r2035r2036r2037

  • 补充 ExecutionQueue 用来喂蜘蛛( r2034

  • 删除了``ExecutionEngine`` singleton(:rev:2039

  • 端口 S3ImagesStore (图像管道)使用boto和线程( r2033

  • 移动模块: scrapy.management.telnetscrapy.telnetr2047

更改为默认设置

  • 更改的默认值 SCHEDULER_ORDERDFOr1939

Scrapy 0.8

旧问题追踪器(trac)中的nnn参考票等数字不再可用。

新特点

  • 添加了默认的响应编码设置( r1809

  • 在``FormRequest.from_response()``方法(:rev:1813,:rev:1816)中添加了``dont_click``参数

  • 在``FormRequest.from_response()``方法(:rev:1802,:rev:1803)中添加了``clickdata``参数

  • 添加了对HTTP代理的支持( HttpProxyMiddlewarer1781r1785

  • 当过滤掉请求时,异地蜘蛛中间件现在记录消息。( r1841

向后不兼容的更改

  • 改变 scrapy.utils.response.get_meta_refresh() signature (r1804)

  • 删除了已弃用的``scrapy.item.ScrapedItem``类 - 使用``scrapy.item.Item代替```(:rev:1838

  • 删除了已弃用的``scrapy.xpath``模块 - 改为使用``scrapy.selector``。(启:1836

  • 删除了已弃用的``core.signals.domain_open``信号 - 改为使用``core.signals.domain_opened``(:rev:1822

  • log.msg() 现在收到一个 spider 论证(论证) r1822
    • 旧的域参数已被弃用,将在0.9中删除。对于蜘蛛,你应该经常使用 spider 参数并传递spider引用。如果确实要传递字符串,请使用 component 改为参数。

  • 改变核心信号 domain_openeddomain_closeddomain_idle

  • 将项目管道更改为使用spider而不是域
    • 这个 domain 的参数 process_item() 项目管道方法已更改为 spider ,新签名为: process_item(spider, item)r1827 (105)

    • 要快速移植代码(使用Scrapy0.8),只需使用 spider.domain_name 你以前用过的地方 domain .

  • 更改了stats API以使用spider而不是域( r1849 (113)
    • StatsCollector 已更改为在其方法中接收蜘蛛引用(而不是域)( set_valueinc_value 等)。

    • 补充 StatsCollector.iter_spider_stats() 方法

    • 删除了``StatsCollector.list_domains()``方法

    • 另外,stats信号被重命名,现在传递蜘蛛引用(而不是域)。以下是更改的摘要:

    • 要快速移植代码(使用Scrapy0.8),只需使用 spider.domain_name 你以前用过的地方 domain . spider_stats 包含与完全相同的数据 domain_stats .

  • CloseDomain 扩展移动到 scrapy.contrib.closespider.CloseSpiderr1833
    • 其设置也被重命名:
      • CLOSEDOMAIN_TIMEOUT to CLOSESPIDER_TIMEOUT

      • CLOSEDOMAIN_ITEMCOUNT to CLOSESPIDER_ITEMCOUNT

  • 删除了已弃用的``SCRAPYSETTINGS_MODULE``环境变量 - 改为使用``SCRAPY_SETTINGS_MODULE``(:rev:1840

  • 将设置:``REQUESTS_PER_DOMAIN``重命名为``CONCURRENT_REQUESTS_PER_SPIDER``(:rev:1830,:rev:1844

  • 将设置:``CONCURRENT_DOMAINS``重命名为``CONCURRENT_SPIDERS``(:rev:1830

  • 重构HTTP缓存中间件

  • HTTP缓存中间件经过了大量的重构,保留了相同的功能,但删除了域分段。( r1843

  • 重命名的异常: DontCloseDomainDontCloseSpiderr1859 (120)

  • 重命名的扩展名: DelayedCloseDomainSpiderCloseDelayr1861 (121)

  • 删除了过时的``scrapy.utils.markup.remove_escape_chars``函数 - 改用``scrapy.utils.markup.replace_escape_chars``(:rev:1865

Scrapy 0.7

第一次发行的Scrapy。