Scrapy 1.3.2 - 初始

Scrapy是一款强大的爬虫框架,适用于网站爬取和数据挖掘等任务。本文介绍了一个简单的Scrapy爬虫示例,演示如何抓取网页数据并保存为JSON文件。

Scrapy 1.3

Scrapy是用于爬取网站并提取结构化数据的应用程序框架,也可用于各种其他程序,如数据挖掘,信息处理或历史归档。

从一个爬虫例子开始

我们通过使用最简单的方式来运行一个Scrapy Spider 例子,以此来学习Scrapy可以为什么带来那些惊喜。
下面是一个爬虫的代码,我们从http://quotes.toscrape.com/网站抓取其中的句子和作者,并且跟随者下一页超下爬取。

# -*- coding:utf-8 -*-
import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    start_urls = [
        'http://quotes.toscrape.com/'
    ]
    def parse(self, response):
        for quote in response.xpath('//div[@class="quote"]'):
            yield {
                'text' : quote.xpath('span[@class="text"]/text()').extract_first(),
                'author' : quote.xpath('span/small/text()').extract_first(),
            }
        next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback= self.parse)

将上边的代码存为python文件,比如 quotes_spider.py 并且用runspider命令在控制台中运行该程序。

 scrapy runspider quotes_spider.py -o quotes.json

不出所料的话,控制会输出一大段密密麻麻的记录,当运行完成后我们就可以在当前目录下看到quotes.json文件,如果你没有json格式化工具的话打开以后可能看起来乱糟糟的,这里推荐你使用在线json解析工具,点击前往。打开以后就像下边这个样子

[ 
    {
        "text":"“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”",
        "author":"Albert Einstein"
    },
    {
        "text":"“It is our choices, Harry, that show what we truly are, far more than our abilities.”",
        "author":"J.K. Rowling"
    },
    {
        "text":"“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”",
        "author":"Albert Einstein"
    },
    ...]

刚刚发生了什么呢?

当你运行命令scrapy runspider quotes_spider.py,Scrapy 寻找到一个爬虫定义,进入其中并且通过自己的crawler引擎来运行它。我们在start_urls属性中定义了url,爬虫向定义的url发送请求并且回调了默认的回调方法parse,将请求相应的对象作为参数传递给parse方法。在回调方法的解析中,我们使用xpath循环节点,并产生一个Python dict(字典)存储提取到的文本和作者。最后我们找到了下一页的链接并调用另一个使用相同解析方法的请求作为回调。

这里,您可以注意到Scrapy的一个最主要的优势: 请求(request)是 被异步调度和处理的 。 这意味着,Scrapy并不需要等待一个请求(request)完成及处理,在此同时, 也发送其他请求或者做些其他事情。 这也意味着,当有些请求失败或者处理过程中出现错误时,其他的请求也能继续处理

在允许您可以以非常快的速度进行爬取时(以容忍错误的方式同时发送多个request), Scrapy也通过 一些设置 来允许您控制其爬取的方式。 例如,您可以为两个request之间设置下载延迟, 限制单域名(domain)或单个IP的并发请求量,甚至可以 使用自动限制插件 来自动处理这些问题

注释

这里使用了 feed exports 来创建了JSON文件, 您可以很容易的改变导出的格式(比如XML或CSV)或者存储后端(例如FTP或者 Amazon S3)。 您也可以编写 item pipeline 来将item存储到数据库中。

还有什么

您已经了解了如何通过Scrapy提取存储网页中的信息,但这仅仅只是冰山一角。Scrapy提供了很多强大的特性来使得爬取更为简单高效, 例如:

  • 对HTML, XML源数据 选择及提取 的内置支持, 提供了CSS选择器(selector)以及XPath表达式进行处理, 以及一些帮助函数(helper method)来使用正则表达式来提取数据
  • 提供 交互式shell终端 , 为您测试CSS及XPath表达式,编写和调试爬虫提供了极大的方便
  • 通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持
  • 提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持
  • 针对非英语语系中不标准或者错误的编码声明, 提供了自动检测以及健壮的编码支持
  • 高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能
  • 内置的中间件及扩展为下列功能提供了支持: * cookies and session 处理 * HTTP 压缩 * HTTP 认证 * HTTP 缓存 * user-agent模拟 * robots.txt * 爬取深度限制 * 其他
  • 内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看并且调试爬虫
  • 以及其他一些特性,例如可重用的,从 Sitemaps 及 XML/CSV feeds中爬取网站的爬虫、 可以 自动下载 爬取到的数据中的图片(或者其他资源)的media pipeline、 带缓存的DNS解析器,以及更多的特性

接下来呢

下一步你将要安装Scrapy,参照本教程学习如何创建一个完整的Scrapy项目。谢谢你的加入。

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值