中企动力 > 头条 > python用在哪些地方

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python用在哪些地方

身为程序员,你都接触过哪些编程语言,都是在什么环境下使用的? 公司视频课程

img

滕子骞

关注

身为程序员,你都使用过哪些编程语言,都是在什么环境下接触的?

先说小编,一共接触过七门语言,FoxBase,VB,C,C++,Java,Ruby,PHP,正八经的使用,只有两门,java和ruby。

初中接触的第一门编程类的语言FoxBase

那一年99年,貌似大家都在学basic,因为我们老师只会FoxBase,为了考二级,就报了这个班。

由于属于农村,所以兴趣班一般会以数学啊、生物啊、化学啊为主,计算机兴趣小组已经很超前了,在那个年代。

其实更想学音乐,可惜没有,很羡慕现在的孩子。

当时用的电脑是只有一个软盘驱动器的,没有硬盘,所有的东西都要做在软盘里,没有鼠标,只能用键盘操作,主机是横着放的。

找了一张照片,跟下边这个一样。

这是学的第一门编程语言,基于数据库的,还没到达网络这方面,毕竟当时,学校的条件,连上网都是困难。

大学的VB,C,C++

这几门语言是大学里的必修课,vb属于选修,vb和vf你自己选一个。

这几门语言,学了之后到现在也没用上,或许编程思维用上过,比如C++的面向对象。记得大一的时候开全体会议,有同学还问,为什么要学C,不学当下比较流行的java?被告知,c是基础,而且要考二级,不过不行,你之前考的只要不是二级C,学校都不认。

大四的java

到了大四,学校教的东西,还是感觉没法直接用,怎么写网站,怎么发布上去,怎么租服务器,一概不会。

这个是在一个实训培训班里学到的,还好里面的老师是刚从企业里出来的,教了不少实战经验。

自身的感觉,如鱼得水般,每天过的都很充实。

从每天上午8点开始上课,上午、下午都是两节大课,晚上吃完饭回来做题,写毕业设计的网站,凌晨两三点再回宿舍。

我们那个培训的地方在车库,宿舍也在车库,一起连着,方便大家休息。

基本上那边所有人凌晨12点都不会回去睡觉的,都会学到凌晨1点,之后才会有同学陆陆续续回宿舍。

这是最充实的一年,也是学的最多的一年,一年下来,整个人变了样,不仅仅是熬夜,因为每天对着的是老式的显示器,辐射相当的大。

偶尔一天照照镜子,突然发现自己老了十岁,真是身有感触。

php和ruby

离上一段经历已经过去7年,来了这个公司,接触php是因为公司外包的项目用php,因为对方是兼职做的,自身有全职工作,速度有点提不上来,白天还没法干活,就依葫芦画瓢,改改小的代码。

所以php并不算真正会的语言,仅仅是用过。

接触ruby,是因为外包写的速度实在是忍受不了了,记得ruby是个敏捷开发,速度是java的10倍,就选了这门语言,自己边学,边做架构,写代码,一个干了半年,弄出了一套还算能用的crm。

每天不仅要查这门语言怎么用,还要想系统架构,几乎是每写一段代码都要上网查怎么用,想吐槽的不是因为这个而速度慢,而是电脑,因为还要干别的,不敢重做系统,就装了个虚拟机。

4G的内存,装了个mac虚拟机,打开浏览器,从输入百度按回车,到百度页面出来,我数了数,6秒钟。

第一套系统就是在这种环境下做出来的,想想都是泪,不过现在可以当段子来讲了,自己有多么糗。

小伙伴们,你们现在用的语言,当时在学的时候有没有遇到什么糗事呢?

本文由木易小光原创,欢迎关注,带你一起长知识!

跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭! 企业视频课程

img

柯绍辉

关注

背景

用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github/scrapy/scrapy。Scrapy 的确是一个非常强大的爬虫框架,爬取效率高,扩展性好,基本上是使用 Python 开发爬虫的必备利器。如果使用 Scrapy 做爬虫,那么在爬取时,我们当然完全可以使用自己的主机来完成爬取,但当爬取量非常大的时候,我们肯定不能在自己的机器上来运行爬虫了,一个好的方法就是将 Scrapy 部署到远程服务器上来执行。

所以,这时候就出现了另一个库 Scrapyd,GitHub:https://github/scrapy/scrapyd,有了它我们只需要在远程服务器上安装一个 Scrapyd,启动这个服务,就可以将我们写的 Scrapy 项目部署到远程主机上了,Scrapyd 还提供了各种操作 API,可以自由地控制 Scrapy 项目的运行,API 文档:http://scrapyd.readthedocs.io/en/stable/api.html,例如我们将 Scrapyd 安装在 IP 为 88.88.88.88 的服务器上,然后将 Scrapy 项目部署上去,这时候我们通过请求 API 就可以来控制 Scrapy 项目的运行了,命令如下:

1

curlhttp://88.88.88.88:6800/schedule.json -d project=myproject -d spider=somespider

这样就相当于启动了 myproject 项目的 somespider 爬虫,而不用我们再用命令行方式去启动爬虫,同时 Scrapyd 还提供了查看爬虫状态、取消爬虫任务、添加爬虫版本、删除爬虫版本等等的一系列 API,所以说,有了 Scrapyd,我们可以通过 API 来控制爬虫的运行,摆脱了命令行的依赖。

另外爬虫部署还是个麻烦事,因为我们需要将爬虫代码上传到远程服务器上,这个过程涉及到打包和上传两个过程,在 Scrapyd 中其实提供了这个部署的 API,叫做 addversion,但是它接受的内容是 egg 包文件,所以说要用这个接口,我们必须要把我们的 Scrapy 项目打包成 egg 文件,然后再利用文件上传的方式请求这个 addversion 接口才可以完成上传,这个过程又比较繁琐了,所以又出现了一个工具叫做 Scrapyd-Client,GitHub:https://github/scrapy/scrapyd-client,利用它的 scrapyd-deploy 命令我们便可以完成打包和上传的两个功能,可谓是又方便了一步。

这样我们就已经解决了部署的问题,回过头来,如果我们要想实时查看服务器上 Scrapy 的运行状态,那该怎么办呢?像刚才说的,当然是请求 Scrapyd 的 API 了,如果我们想用 Python 程序来控制一下呢?我们还要用 requests 库一次次地请求这些 API ?这就太麻烦了吧,所以为了解决这个需求,Scrapyd-API 又出现了,GitHub:https://github/djm/python-scrapyd-api,有了它我们可以只用简单的 Python 代码就可以实现 Scrapy 项目的监控和运行:

1

2

3

fromscrapyd_apiimportScrapydAPI

scrapyd=ScrapydAPI('http://88.888.88.88:6800')

scrapyd.list_jobs('project_name')

这样它的返回结果就是各个 Scrapy 项目的运行情况。

例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

'pending':[

],

'running':[

{

'id':u'14a65...b27ce',

'spider':u'spider_name',

'start_time':u'2018-01-17 22:45:31.975358'

},

],

'finished':[

{

'id':'34c23...b21ba',

'spider':'spider_name',

'start_time':'2018-01-11 22:45:31.975358',

'end_time':'2018-01-17 14:01:18.209680'

}

]

}

这样我们就可以看到 Scrapy 爬虫的运行状态了。

所以,有了它们,我们可以完成的是:

通过 Scrapyd 完成 Scrapy 项目的部署

通过 Scrapyd 提供的 API 来控制 Scrapy 项目的启动及状态监控

通过 Scrapyd-Client 来简化 Scrapy 项目的部署

通过 Scrapyd-API 来通过 Python 控制 Scrapy 项目

是不是方便多了?

可是?真的达到最方便了吗?肯定没有!如果这一切的一切,从 Scrapy 的部署、启动到监控、日志查看,我们只需要鼠标键盘点几下就可以完成,那岂不是美滋滋?更或者说,连 Scrapy 代码都可以帮你自动生成,那岂不是爽爆了?

有需求就有动力,没错,Gerapy 就是为此而生的,GitHub:https://github/Gerapy/Gerapy。

本节我们就来简单了解一下 Gerapy 分布式爬虫管理框架的使用方法。

安装

Gerapy 是一款分布式爬虫管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js 开发,Gerapy 可以帮助我们:

更方便地控制爬虫运行

更直观地查看爬虫状态

更实时地查看爬取结果

更简单地实现项目部署

更统一地实现主机管理

更轻松地编写爬虫代码

安装非常简单,只需要运行 pip3 命令即可:

1

$pip3installgerapy

安装完成之后我们就可以使用 gerapy 命令了,输入 gerapy 便可以获取它的基本使用方法:

1

2

3

4

5

6

7

$gerapy

Usage:

gerapyinit[--folder=]

gerapymigrate

gerapycreatesuperuser

gerapyrunserver[]

gerapymakemigrations

如果出现上述结果,就证明 Gerapy 安装成功了。

初始化

接下来我们来开始使用 Gerapy,首先利用如下命令进行一下初始化,在任意路径下均可执行如下命令:

1

$gerapyinit

执行完毕之后,本地便会生成一个名字为 gerapy 的文件夹,接着进入该文件夹,可以看到有一个 projects 文件夹,我们后面会用到。

紧接着执行数据库初始化命令:

1

2

cdgerapy

gerapymigrate

这样它就会在 gerapy 目录下生成一个 SQLite 数据库,同时建立数据库表。

接着我们只需要再运行命令启动服务就好了:

1

gerapyrunserver

这样我们就可以看到 Gerapy 已经在 8000 端口上运行了。

全部的操作流程截图如下:

接下来我们在浏览器中打开 http://localhost:8000/,就可以看到 Gerapy 的主界面了:

这里显示了主机、项目的状态,当然由于我们没有添加主机,所以所有的数目都是 0。

如果我们可以正常访问这个页面,那就证明 Gerapy 初始化都成功了。

主机管理

接下来我们可以点击左侧 Clients 选项卡,即主机管理页面,添加我们的 Scrapyd 远程服务,点击右上角的创建按钮即可添加我们需要管理的 Scrapyd 服务:

需要添加 IP、端口,以及名称,点击创建即可完成添加,点击返回即可看到当前添加的 Scrapyd 服务列表,样例如下所示:

这样我们可以在状态一栏看到各个 Scrapyd 服务是否可用,同时可以一目了然当前所有 Scrapyd 服务列表,另外我们还可以自由地进行编辑和删除。

项目管理

Gerapy 的核心功能当然是项目管理,在这里我们可以自由地配置、编辑、部署我们的 Scrapy 项目,点击左侧的 Projects ,即项目管理选项,我们可以看到如下空白的页面:

假设现在我们有一个 Scrapy 项目,如果我们想要进行管理和部署,还记得初始化过程中提到的 projects 文件夹吗?这时我们只需要将项目拖动到刚才 gerapy 运行目录的 projects 文件夹下,例如我这里写好了一个 Scrapy 项目,名字叫做 zhihusite,这时把它拖动到 projects 文件夹下:

这时刷新页面,我们便可以看到 Gerapy 检测到了这个项目,同时它是不可配置、没有打包的:

这时我们可以点击部署按钮进行打包和部署,在右下角我们可以输入打包时的描述信息,类似于 Git 的 commit 信息,然后点击打包按钮,即可发现 Gerapy 会提示打包成功,同时在左侧显示打包的结果和打包名称:

打包成功之后,我们便可以进行部署了,我们可以选择需要部署的主机,点击后方的部署按钮进行部署,同时也可以批量选择主机进行部署,示例如下:

可以发现此方法相比 Scrapyd-Client 的命令行式部署,简直不能方便更多。

监控任务

部署完毕之后就可以回到主机管理页面进行任务调度了,任选一台主机,点击调度按钮即可进入任务管理页面,此页面可以查看当前 Scrapyd 服务的所有项目、所有爬虫及运行状态:

我们可以通过点击新任务、停止等按钮来实现任务的启动和停止等操作,同时也可以通过展开任务条目查看日志详情:

另外我们还可以随时点击停止按钮来取消 Scrapy 任务的运行。

这样我们就可以在此页面方便地管理每个 Scrapyd 服务上的 每个 Scrapy 项目的运行了。

项目编辑

同时 Gerapy 还支持项目编辑功能,有了它我们不再需要 IDE 即可完成项目的编写,我们点击项目的编辑按钮即可进入到编辑页面,如图所示:

这样即使 Gerapy 部署在远程的服务器上,我们不方便用 IDE 打开,也不喜欢用 Vim 等编辑软件,我们可以借助于本功能方便地完成代码的编写。

代码生成

上述的项目主要针对的是我们已经写好的 Scrapy 项目,我们可以借助于 Gerapy 方便地完成编辑、部署、控制、监测等功能,而且这些项目的一些逻辑、配置都是已经写死在代码里面的,如果要修改的话,需要直接修改代码,即这些项目都是不可配置的。

在 Scrapy 中,其实提供了一个可配置化的爬虫 CrawlSpider,它可以利用一些规则来完成爬取规则和解析规则的配置,这样可配置化程度就非常高,这样我们只需要维护爬取规则、提取逻辑就可以了。如果要新增一个爬虫,我们只需要写好对应的规则即可,这类爬虫就叫做可配置化爬虫。

Gerapy 可以做到:我们写好爬虫规则,它帮我们自动生成 Scrapy 项目代码。

我们可以点击项目页面的右上角的创建按钮,增加一个可配置化爬虫,接着我们便可以在此处添加提取实体、爬取规则、抽取规则了,例如这里的解析器,我们可以配置解析成为哪个实体,每个字段使用怎样的解析方式,如 XPath 或 CSS 解析器、直接获取属性、直接添加值等多重方式,另外还可以指定处理器进行数据清洗,或直接指定正则表达式进行解析等等,通过这些流程我们可以做到任何字段的解析。

再比如爬取规则,我们可以指定从哪个链接开始爬取,允许爬取的域名是什么,该链接提取哪些跟进的链接,用什么解析方法来处理等等配置。通过这些配置,我们可以完成爬取规则的设置。

最后点击生成按钮即可完成代码的生成。

生成的代码示例结果如图所示,可见其结构和 Scrapy 代码是完全一致的。

生成代码之后,我们只需要像上述流程一样,把项目进行部署、启动就好了,不需要我们写任何一行代码,即可完成爬虫的编写、部署、控制、监测。

结语

以上便是 Gerapy 分布式爬虫管理框架的基本用法,如需了解更多,可以访问其 GitHub:https://github/Gerapy/Gerapy。

如果觉得此框架有不足的地方,欢迎提 Issue,也欢迎发 Pull Request 来贡献代码,如果觉得 Gerapy 有所帮助,还望赐予一个 Star!非常感谢!

转载请注明:静觅跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

13个Python web框架比较 行业视频课程

img

雨逸蓝

关注

Python程序员有很多很好的选择来创建Web应用程序和API;Django,Weppy,Bottle和Flask引领潮流。

如果正在开发一个Web应用程序并且已经选择使用Python作为构建它的语言,那么这是一个明智的选择。Python的开发成熟度,强大的库以及广泛的实际应用使其成为Web开发的必需。

现在是困难的部分:从众多可用的Python web框架中选择一个。它们不仅数量在不断增长,而且很难找到最适合你的。如果你正在构建一个快速而又简单的REST API,那么你将不需要任何完整的面向用户的应用程序所需的管道和连接,该应用程序具有用户登录、表单验证和上传处理就可以了。

在本文中,我们将研究13种最广泛部署的Python web框架。我们将关注每种web应用程序最适合构建哪种类型的web应用程序,并研究它们如何在以下六个方面相互竞争:

安装:设置不需要正式的框架项目(它可以简单地作为包含的模块放到现有的项目中)、启动所需的模板文件最少、或者带有某种预先配置的设置,这是多么容易或简单。

文档:几乎每一个像样的Python项目都有文档,可以遍历设置、演示基本用例并提供关于API的详细信息。在这里,我们给这样的框架更高的分数:这些框架展示了如何在教程中创建整个应用程序,包括常见的配方或设计模式,以及超出职责范围(例如提供有关如何运行的详细信息) Python变体(如PyPy或IronPython)下的框架。

管理:这是相对得分,表示配置和维护框架需要做多少工作。默认情况下,工作量最小的框架得分更高。

原生能力:包含多少组件?得分较高的是那些为国际化,HTML模板和数据访问层提供原生支持的框架。还有一些框架使用Python最近引入的异步I/O操作的原生支持。

安全性:提供原生安全措施(如跨站点请求伪造(CSRF)保护和使用加密cookie的会话管理)的框架获得更高的分数。

可伸缩性:大多数Python框架可以利用像Gevent或Gunicorn这样的项目来大规模运行。在这里,我们看一下提升可伸缩性的框架原生特性,如输出和页面片段缓存。

如果你对性能基准感到好奇,请查看TechEmpower正在进行的一系列试验,这些试验比较了各种任务中的多个Web框架,并将代码和方法发布到GitHub并进行不断的重新评估。并非所有讨论中的框架都在那里进行了分析,但是可以很好地了解哪种框架在哪种负载下表现最佳。

我们将分析13个框架。其中五个:CubicWeb,Django,Web2py,Weppy和Zope2,采用“控件”方法,包含你可以想象的Web应用程序所需的大多数功能。其余八个框架: Bottle,CherryPy,Falcon,Flask,Pyramid,Tornado,Web.py和Wheezy.web,提供更简约的外观,交易批量和完整性,简单易用。

让我们从重量级开始吧。

重量级的Python Web框架

CubicWeb

CubicWeb被称为“一个支持重用和面向对象设计的语义Web应用程序框架。”这是一个有趣的系统,强调使用抽象和可重用的代码块称为“多维数据集”,但对于某些开发人员来说可能过于抽象或特殊。

多维数据集是具有模式(数据模型),实体(编程逻辑)和视图的软件组件。通过组合多个立方体,每个立方体执行自己的任务,可以通过重用自己的代码和其他代码来编写软件应用程序。

CubicWeb的核心是提供每个Web应用程序使用的基本搭建材料:用于数据连接和存储的“存储库”;用于基本HTTP请求/响应和CRUD操作的“Web引擎”;以及用于建模数据的模式。所有这些都在Python类定义中描述。要设置和管理CubicWeb的实例,可以使用类似于Django的命令行工具。

CubicWeb似乎没有使用Python 3的原生异步功能。包含异步的一种迂回方式是使用cubicweb.pyramid模块将Pyramid框架用作Web服务器,并使用异步构造在Pyramid上绘制。但是现在看起来更加直截了当。

要在CubicWeb应用程序中获取或操作持久数据,可以使用关系查询语言(RQL),它采用模糊的SQL语法,但在W3C的SparQL之后进行模式化。CubicWeb的理由再次是抽象:RQL提供了一种高度分离的路径来相互关联各种数据源。但是,随着它的实现,通过手动构建查询作为字符串,它可能会让习惯于ORM的开发人员感到过时。

使用CubicWeb还有其他障碍。首先,设置可能很麻烦。因为CubicWeb有很多依赖项,所以最好使用pip install来获取所有依赖项。可能还必须在本地环境中执行一定数量的手动调整。这与运行pip install或将框架代码放入另一个项目的子文件夹的其他框架形成鲜明对比,这就是所需要的。

另一个潜在的问题是缺少本机模板引擎;生成HTML留给开发人员。可以通过使用像Jinja2这样的第三方模板系统或选择为Web UI提供工具的多维数据集来克服这个问题,例如Boostrap HTML框架的工具。

CubicWeb的一个长期问题,缺乏Python 3支持,目前已经解决。截至2016年6月的版本3.23,CubicWeb支持Python 3,但Twisted等模块本身并未完全移植。

与Web2py一样,CubicWeb将其冗长的文档称为“书籍”。它需要时间来解释CubicWeb的不寻常方法,演示如何构建一些基本应用程序,包括API引用,并且通常不会特定的方式。

Django

自Django首次出现以来已经有十年,它已经成为Python最广泛部署的用于创建Web应用程序的框架之一。 Django配备了你可能需要的大部分组件,因此它倾向于构建大型应用程序而不是小型应用程序。

经过多年在版本1.x后,Django最近在小数点的左边创建了一个版本。 Django 2.0中最大的变化是框架现在只适用于Python 3.4及更高版本。理想情况下,你应该使用Python 3.x,所以使用Django的1.x分支的唯一原因是你遇到了旧版本的Python。

Django吸引力的一个关键部分是部署速度。因为它包含了开发普通Web应用程序所需的许多部分,所以可以快速行动。路由,URL解析,数据库连接(包括ORM),表单验证,攻击保护和模板都是内置的。

将找到最常见的Web应用程序方案的构建块。例如,用户管理可在大多数网站上找到,因此Django将其作为标准元素提供。Django本身具有这些功能,而不必创建自己的系统来跟踪用户帐户,会话,密码,登录/注销,管理员权限等。它们可以按原样使用或扩展,以包含最少量工作的新用例。

核心是BSD,一些组件是LGPLv3。可通过zope.formlib获得;单独安装但作为项目的一部分支持。通过第三方扩展程序提供。

Django具有健全和安全的默认设置,有助于保护Web应用程序免受攻击。将变量放在页面模板中时,例如带有HTML或JavaScript的字符串,除非明确将变量实例指定为安全,否则不会按字面意义呈现内容。这本身就减少了许多常见的跨站脚本问题。如果要执行表单验证,可以使用从简单的CSRF保护到返回详细错误反馈的完整逐个字段验证机制的所有内容。

如果没有强大的文档可以使用像Django那样丰富和广泛的功能。Django的文档站点从多个角度深入研究框架的各个方面。使用Python 3或其他语言,正确的安全性,实现常见的Web应用程序组件(如会话或分页),生成站点地图,它们都被覆盖。还详细描述了应用程序模型,视图和模板的每个层的API。

然而,强大的力量带来了极大的复杂性。Django应用程序以其头重脚轻而闻名,具有许多移动部件。即使只有几条路线的简单Django应用程序也需要相当多的配置才能运行。如果你的工作只是设置几个简单的REST端点,Django几乎肯定是矫枉过正的。

Django也有它的怪癖。例如,页面模板不能使用callables。示例:可以将{{user.name}}作为模板中的组件传递,但不能传递{{user.get_name()}}。这是Django确保模板不会无意中做出令人讨厌的事情的方法之一,但如果你没有为它们做好准备,这些限制可能会很刺激。虽然有解决方法,但它们往往会对性能产生影响。

Django的核心是同步。但是,添加异步行为的一种方法是通过Django Channels项目。这个项目是官方的Django附加组件,它为Django添加了对连接和套接字的异步处理,同时保留了Django的编程习惯用法。

web2py

在Ruby世界中,Ruby on Rails是事实上的Web框架。DePaul大学计算机科学教授Massimo Di Pierro受到Rails的启发,用Python创建一个易于设置和使用的Web框架。结果是Web2py。

Web2py最大的吸引力在于其内置的开发环境。当设置Web2py实例时,将获得一个Web界面,实际上是一个在线Python应用程序编辑器,可以在其中配置应用程序的组件。这通常意味着创建模型,视图和控制器,每个都通过Python模块或HTML模板进行描述。一些示例应用程序随附Web2py。可以将它们分开来查看它们的工作方式,或将它们用作启动器模板来创建自己的应用程序。

开发人员通常只需下载源代码并使用它来部署Web2py。但对于Windows或MacOS上技术含量较低的用户,Web2py的创建者提供的版本基本上是独立服务器。下载,解压缩并运行其中一个版本,将拥有一个内置Web2py预配置副本的本地Web服务器。这是一个很好的方法来创建一个Web2py应用程序,然后可以部署其他地方。

Web2py的Web界面是使用Bootstrap 2.16.1构建的,因此它易于操作并且易于导航。浏览器内编辑器不能替代完整的IDE,但它配备了有用的辅助工具,如行编号和Python语法高亮(包括自动缩进)。还包括一个Python shell的快速Web界面,因此如果需要,可以从命令行与Web2py交互,这对专家来说是一个很好的让步。

Web2py中使用的数据抽象系统与Django的ORM和受其启发的其他ORM(例如Peewee)略有不同。这些系统使用Python类来定义模型,在Web2py中,使用构造函数(如define_table)来实例化模型。这些差异中的大部分可能只会对那些已经有过经验并且开始使用另一个的人产生震动;他们对新人来说同样复杂。将Web2py连接到数据提供者可能不会遇到任何麻烦,因为它几乎涉及现有的每个主要数据库。

一个真正有用的数据库相关功能是生成模型图的能力,更好地可视化模型之间的相互关系。但是,需要安装pygraphviz库才能启用该功能。

Web2py通过对jQuery和AJAX的集成支持,提供许多其他专业级组件:国际化功能,多种缓存方法,访问控制和授权,甚至前端效果(例如,表单中的日期选择器)。虽然不允许使用中间件来替换核心Web2py功能,但也包括外部和内部中间件的挂钩。

Web2py的一个重要限制是它仅与Python 2.x兼容。首先,这意味着Web2py无法使用Python 3的异步语法。如果你依赖于Python 3独有的外部库,那么你就不走运了。但是,正在开展使Web2py Python 3兼容的工作,并且在撰写本文时它已接近完成。

毫无疑问,Web2py的文档被称为“书”。首先,它涵盖了Web2py,Python以及用于这两者的部署环境的大量材料。其次,它以高度可访问的叙事风格书写。第三,它深入讨论了常见的应用程序构建方案。例如,有一整章使用jQuery(与Web2Py捆绑在一起)来构建AJAX应用程序。

Weppy

Weppy感觉就像Flask的简约风格和Django的完整性之间的中间标记。虽然开发Weppy应用程序具有Flash的直接性,但Weppy具有Django中的许多功能,如数据层和身份验证。因此,Weppy适用于从极其简单到适度复杂的应用程序。

乍一看,Weppy代码看起来很像Flask或Bottle代码。启动和运行基本的单路网站需要很少的指示。路径可以通过函数装饰器(简单方法)或以编程方式描述,并且这样做的语法与Flask/Bottle密切相关。除了语法的微小变化外,模板的工作方式大致相同。

Weppy与其他框架形成鲜明对比,包括它们仅作为插件或附加组件包含的一些功能。例如,Flask和Bottle都没有内置的ORM或数据管理系统。Weppy包含一个ORM,虽然它是基于pyDAL项目而不是更受欢迎的SQLAlchemy。Weppy甚至支持模式迁移,Django支持模式迁移作为其ORM的一部分(同样,Django的迁移系统也更加自动化)。虽然Weppy有一个扩展机制,但官方批准的附加组件列表很小,远小于Flask的扩展目录。

像Weppy这样的轻量级框架通常用于构建RESTful API,而Weppy则为此配备了便利功能。在路由上放置一个@service修饰器,返回的数据将自动格式化为选择的JSON或XML。

Weppy包含的其他功能更符合更大的框架,但它们是在没有批量的情况下实现的。示例:数据验证机制,表单处理,响应缓存和用户验证。在所有这些情况下,Weppy采取“恰到好处”的方法。提供的功能并不像在Django大小的框架中那样完整,但开发人员不需要投入大量精力来使它们变得有用,并且它们可以在事后得到扩展。

Weppy中发现的另一个通常与更重量级框架相关的功能是国际化支持。模板中的字符串可以根据应用程序提供的区域设置文件进行翻译,这些文件是简单的Python字典。也可以通过解析浏览器请求(即Accept-Language HTTP标头)或将翻译绑定到特定路由来设置语言选择。

Weppy的文档与框架本身具有相同的风格。它干净,可读,并且被人类消费。除了通常的“hello world”应用程序示例之外,它还包含一个很好的演练教程,可以让你创建一个微博系统作为初学者项目。

Weppy的长期计划包括支持异步和套接字作...

Python大佬批量爬取中国院士信息,告诉你哪个地方人杰地灵 流量视频课程

img

冒险

关注

院士(Academician)源于Academy, Academy是古希腊传说中的一位拯救雅典免遭劫难而牺牲的英雄,属于科学及学术界的最高荣誉头衔。哪里盛产生院士?python爬虫告诉你。

背景调研

目前中国院士共有1500余人,其中科学院院士799人,工程院院士875人。

科学院院士名单 http://casad.cas/chnl/371/index.html

工程院院士名单 http://cae/cae/html/main/col48/column_48_1.html

这里我以工程院院士信息抓取进行讲解。

工程院士出生地分布图

必备模块

通过 pip 安装scrapy 爬虫框架模块通过 pip 安装 jieba 分词模块通过 pip 安装win32api如果报ImportError: DLL load failed: 找不到指定的模块。 安装好后,把 D:Python27_64Libsite-packagespywin32_system32下的所有东西拷贝到C:WindowsSystem32下面

爬虫流程

在E盘下面建立文件夹project_scrapy,

建立爬虫项目 在E盘下面建立文件夹project_scrapy,进入该文件夹下面,打开cmd窗口,然后运行下面的命令搭建爬虫框架。 scrapy startproject engaca_spider 目录树如下:E:project_scrapy>tree /f卷 新加卷 的文件夹 PATH 列表卷序列号为 00000001 7009:36A5E:.└─engaca_spider │ scrapy.cfg │ └─engaca_spider │ items.py │ middlewares.py │ pipelines.py │ settings.py │ __init__.py │ └─spiders __init__.py

设置输出内容 在items.py 中添加如下内容# -*- coding: utf-8 -*- import scrapyclass EngacaSpiderItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() name = scrapy.Field() place = scrapy.Field() pass

在settings.py 中设置爬虫源头在settings.py 文件添加如下语句starturl = 'http://cae/cae/html/main/col48/column_48_1.html'省份列表文件 scrapy.cfg的同层文件夹中存放pro_list.txt链接:https://pan.baidu/s/1brg0MIz 密码:selo爬虫核心代码 在spiders文件夹下面建立 aca_spider.py#!python #coding: utf-8 import scrapyfrom scrapy.spiders import Spiderfrom scrapy.selector import Selector import refrom engaca_spider.settings import starturlfrom engaca_spider.items import EngacaSpiderItemfrom pprint import pprintimport jsonimport urllibfrom urlparse import urljoin import jiebapro_list =[ i.strip().decode('utf-8') for i in open("pro_list.txt").readlines()]class EngAcaSpider(Spider): ''' ''' name = "EngAca" #需要处理的http状态 handle_httpstatus_list = [404,403] def start_requests(self): ''' ''' yield scrapy.Request(starturl,self.getnames) def getnames(self,response): ''' ''' if response.status == 403: print 'meet 403, sleep 600 seconds' import time time.sleep(600) yield scrapy.Request(response.url, callback=self.getnames) #404,页面不存在,直接返回即可 elif response.status == 404: print 'meet 404, return' #正常处理 else: print "second:",response.url self.logger.info('a response from %s',response.url) names_li=response.selector.xpath('//li[@class="name_list"]/a') for name_li in names_li: ''' ''' items=EngacaSpiderItem() items['name']=name_li.xpath("./text()").extract_first() #unicode urlhref=name_li.xpath('./@href').extract_first() newurl=urljoin(response.url,urlhref) yield scrapy.Request(newurl,callback=self.getplaces,meta={'items':items}) def getplaces(self,response): ''' ''' items = response.meta['items'] # get first content; # 中英文 混用 .encode('gbk','ignore') 忽略英文空格 ptext=response.selector.xpath('//p[@class="intro"]/p[1]/text()').extract_first() content=ptext.split(u'。')[1] seg_list = jieba.cut(content) for place in seg_list: place=place.replace(u"省",'') place=place.replace(u"市",'') print "place:",place if place in pro_list: items['place']=place break else: items['place']='None' pprint(items) yield items

结果输出代码 在pipelines.py 处理输出内容,可以把内容保存到数据库或者文本中。 这里我直接保存到文本result.txt中。# -*- coding: utf-8 -*- class EngacaSpiderPipeline(object): def process_item(self, item, spider): return itemfrom pprint import pprintimport codecsclass ShopinfoPipeline(object): def process_item(self, item, spider): return itemclass JsonWithEncodingPipeline(object): def __init__(self): self.file = codecs.open('result.txt', 'w', encoding='utf-8') #保存为json文件 line="name place " self.file.write(line)#写入文件中 def process_item(self, item, spider): ''' ''' keylist=['name','place'] baseline="" for i in keylist: baseline+=item[i]+' ' baseline+=" " pprint(baseline) self.file.write(baseline)#写入文件中 def spider_closed(self, spider):#爬虫结束时关闭文件 self.file.close()

在settings.py指定输出管道ITEM_PIPELINES = { 'engaca_spider.pipelines.JsonWithEncodingPipeline': 300, }

运行爬虫

在这个目录scrapy.cfg的同层文件夹下打开cmd窗口运行爬虫,在该目录下生成结果文件result.txt。

scrapy crawl EngAca

利用pycharts进行数据可视化

参照教程,绘制地图热图。matplotlib[05]——微信好友的全国分布的热图

从这张图上,我们可以看出江苏院士最多,超过100人,人杰地灵当之无愧。

项目所有文件

链接:https://pan.baidu/s/1smligBN 密码:jdst

总结

这是最基本也是最重要的爬虫练习。里面没有涉及到JS加密、反爬措施。借助这个练习,可以熟悉爬虫框架。 数据预测未来,做事先人一步。

本文的代码直接就缩水了,如果想复制完整的代码,可以阅读原文。请搜索:python项目实践[02]爬虫——scrapy院士出生地分析

跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭! 行业视频课程

img

宫玲

关注

背景

用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github/scrapy/scrapy。Scrapy 的确是一个非常强大的爬虫框架,爬取效率高,扩展性好,基本上是使用 Python 开发爬虫的必备利器。如果使用 Scrapy 做爬虫,那么在爬取时,我们当然完全可以使用自己的主机来完成爬取,但当爬取量非常大的时候,我们肯定不能在自己的机器上来运行爬虫了,一个好的方法就是将 Scrapy 部署到远程服务器上来执行。

所以,这时候就出现了另一个库 Scrapyd,GitHub:https://github/scrapy/scrapyd,有了它我们只需要在远程服务器上安装一个 Scrapyd,启动这个服务,就可以将我们写的 Scrapy 项目部署到远程主机上了,Scrapyd 还提供了各种操作 API,可以自由地控制 Scrapy 项目的运行,API 文档:http://scrapyd.readthedocs.io/en/stable/api.html,例如我们将 Scrapyd 安装在 IP 为 88.88.88.88 的服务器上,然后将 Scrapy 项目部署上去,这时候我们通过请求 API 就可以来控制 Scrapy 项目的运行了,命令如下:

1

curlhttp://88.88.88.88:6800/schedule.json -d project=myproject -d spider=somespider

这样就相当于启动了 myproject 项目的 somespider 爬虫,而不用我们再用命令行方式去启动爬虫,同时 Scrapyd 还提供了查看爬虫状态、取消爬虫任务、添加爬虫版本、删除爬虫版本等等的一系列 API,所以说,有了 Scrapyd,我们可以通过 API 来控制爬虫的运行,摆脱了命令行的依赖。

另外爬虫部署还是个麻烦事,因为我们需要将爬虫代码上传到远程服务器上,这个过程涉及到打包和上传两个过程,在 Scrapyd 中其实提供了这个部署的 API,叫做 addversion,但是它接受的内容是 egg 包文件,所以说要用这个接口,我们必须要把我们的 Scrapy 项目打包成 egg 文件,然后再利用文件上传的方式请求这个 addversion 接口才可以完成上传,这个过程又比较繁琐了,所以又出现了一个工具叫做 Scrapyd-Client,GitHub:https://github/scrapy/scrapyd-client,利用它的 scrapyd-deploy 命令我们便可以完成打包和上传的两个功能,可谓是又方便了一步。

这样我们就已经解决了部署的问题,回过头来,如果我们要想实时查看服务器上 Scrapy 的运行状态,那该怎么办呢?像刚才说的,当然是请求 Scrapyd 的 API 了,如果我们想用 Python 程序来控制一下呢?我们还要用 requests 库一次次地请求这些 API ?这就太麻烦了吧,所以为了解决这个需求,Scrapyd-API 又出现了,GitHub:https://github/djm/python-scrapyd-api,有了它我们可以只用简单的 Python 代码就可以实现 Scrapy 项目的监控和运行:

1

2

3

fromscrapyd_apiimportScrapydAPI

scrapyd=ScrapydAPI('http://88.888.88.88:6800')

scrapyd.list_jobs('project_name')

这样它的返回结果就是各个 Scrapy 项目的运行情况。

例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

'pending':[

],

'running':[

{

'id':u'14a65...b27ce',

'spider':u'spider_name',

'start_time':u'2018-01-17 22:45:31.975358'

},

],

'finished':[

{

'id':'34c23...b21ba',

'spider':'spider_name',

'start_time':'2018-01-11 22:45:31.975358',

'end_time':'2018-01-17 14:01:18.209680'

}

]

}

这样我们就可以看到 Scrapy 爬虫的运行状态了。

所以,有了它们,我们可以完成的是:

通过 Scrapyd 完成 Scrapy 项目的部署

通过 Scrapyd 提供的 API 来控制 Scrapy 项目的启动及状态监控

通过 Scrapyd-Client 来简化 Scrapy 项目的部署

通过 Scrapyd-API 来通过 Python 控制 Scrapy 项目

是不是方便多了?

可是?真的达到最方便了吗?肯定没有!如果这一切的一切,从 Scrapy 的部署、启动到监控、日志查看,我们只需要鼠标键盘点几下就可以完成,那岂不是美滋滋?更或者说,连 Scrapy 代码都可以帮你自动生成,那岂不是爽爆了?

有需求就有动力,没错,Gerapy 就是为此而生的,GitHub:https://github/Gerapy/Gerapy。

本节我们就来简单了解一下 Gerapy 分布式爬虫管理框架的使用方法。

安装

Gerapy 是一款分布式爬虫管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js 开发,Gerapy 可以帮助我们:

更方便地控制爬虫运行

更直观地查看爬虫状态

更实时地查看爬取结果

更简单地实现项目部署

更统一地实现主机管理

更轻松地编写爬虫代码

安装非常简单,只需要运行 pip3 命令即可:

1

$pip3installgerapy

安装完成之后我们就可以使用 gerapy 命令了,输入 gerapy 便可以获取它的基本使用方法:

1

2

3

4

5

6

7

$gerapy

Usage:

gerapyinit[--folder=]

gerapymigrate

gerapycreatesuperuser

gerapyrunserver[]

gerapymakemigrations

如果出现上述结果,就证明 Gerapy 安装成功了。

初始化

接下来我们来开始使用 Gerapy,首先利用如下命令进行一下初始化,在任意路径下均可执行如下命令:

1

$gerapyinit

执行完毕之后,本地便会生成一个名字为 gerapy 的文件夹,接着进入该文件夹,可以看到有一个 projects 文件夹,我们后面会用到。

紧接着执行数据库初始化命令:

1

2

cdgerapy

gerapymigrate

这样它就会在 gerapy 目录下生成一个 SQLite 数据库,同时建立数据库表。

接着我们只需要再运行命令启动服务就好了:

1

gerapyrunserver

这样我们就可以看到 Gerapy 已经在 8000 端口上运行了。

全部的操作流程截图如下:

接下来我们在浏览器中打开 http://localhost:8000/,就可以看到 Gerapy 的主界面了:

这里显示了主机、项目的状态,当然由于我们没有添加主机,所以所有的数目都是 0。

如果我们可以正常访问这个页面,那就证明 Gerapy 初始化都成功了。

主机管理

接下来我们可以点击左侧 Clients 选项卡,即主机管理页面,添加我们的 Scrapyd 远程服务,点击右上角的创建按钮即可添加我们需要管理的 Scrapyd 服务:

需要添加 IP、端口,以及名称,点击创建即可完成添加,点击返回即可看到当前添加的 Scrapyd 服务列表,样例如下所示:

这样我们可以在状态一栏看到各个 Scrapyd 服务是否可用,同时可以一目了然当前所有 Scrapyd 服务列表,另外我们还可以自由地进行编辑和删除。

项目管理

Gerapy 的核心功能当然是项目管理,在这里我们可以自由地配置、编辑、部署我们的 Scrapy 项目,点击左侧的 Projects ,即项目管理选项,我们可以看到如下空白的页面:

假设现在我们有一个 Scrapy 项目,如果我们想要进行管理和部署,还记得初始化过程中提到的 projects 文件夹吗?这时我们只需要将项目拖动到刚才 gerapy 运行目录的 projects 文件夹下,例如我这里写好了一个 Scrapy 项目,名字叫做 zhihusite,这时把它拖动到 projects 文件夹下:

这时刷新页面,我们便可以看到 Gerapy 检测到了这个项目,同时它是不可配置、没有打包的:

这时我们可以点击部署按钮进行打包和部署,在右下角我们可以输入打包时的描述信息,类似于 Git 的 commit 信息,然后点击打包按钮,即可发现 Gerapy 会提示打包成功,同时在左侧显示打包的结果和打包名称:

打包成功之后,我们便可以进行部署了,我们可以选择需要部署的主机,点击后方的部署按钮进行部署,同时也可以批量选择主机进行部署,示例如下:

可以发现此方法相比 Scrapyd-Client 的命令行式部署,简直不能方便更多。

监控任务

部署完毕之后就可以回到主机管理页面进行任务调度了,任选一台主机,点击调度按钮即可进入任务管理页面,此页面可以查看当前 Scrapyd 服务的所有项目、所有爬虫及运行状态:

我们可以通过点击新任务、停止等按钮来实现任务的启动和停止等操作,同时也可以通过展开任务条目查看日志详情:

另外我们还可以随时点击停止按钮来取消 Scrapy 任务的运行。

这样我们就可以在此页面方便地管理每个 Scrapyd 服务上的 每个 Scrapy 项目的运行了。

项目编辑

同时 Gerapy 还支持项目编辑功能,有了它我们不再需要 IDE 即可完成项目的编写,我们点击项目的编辑按钮即可进入到编辑页面,如图所示:

这样即使 Gerapy 部署在远程的服务器上,我们不方便用 IDE 打开,也不喜欢用 Vim 等编辑软件,我们可以借助于本功能方便地完成代码的编写。

代码生成

上述的项目主要针对的是我们已经写好的 Scrapy 项目,我们可以借助于 Gerapy 方便地完成编辑、部署、控制、监测等功能,而且这些项目的一些逻辑、配置都是已经写死在代码里面的,如果要修改的话,需要直接修改代码,即这些项目都是不可配置的。

在 Scrapy 中,其实提供了一个可配置化的爬虫 CrawlSpider,它可以利用一些规则来完成爬取规则和解析规则的配置,这样可配置化程度就非常高,这样我们只需要维护爬取规则、提取逻辑就可以了。如果要新增一个爬虫,我们只需要写好对应的规则即可,这类爬虫就叫做可配置化爬虫。

Gerapy 可以做到:我们写好爬虫规则,它帮我们自动生成 Scrapy 项目代码。

我们可以点击项目页面的右上角的创建按钮,增加一个可配置化爬虫,接着我们便可以在此处添加提取实体、爬取规则、抽取规则了,例如这里的解析器,我们可以配置解析成为哪个实体,每个字段使用怎样的解析方式,如 XPath 或 CSS 解析器、直接获取属性、直接添加值等多重方式,另外还可以指定处理器进行数据清洗,或直接指定正则表达式进行解析等等,通过这些流程我们可以做到任何字段的解析。

再比如爬取规则,我们可以指定从哪个链接开始爬取,允许爬取的域名是什么,该链接提取哪些跟进的链接,用什么解析方法来处理等等配置。通过这些配置,我们可以完成爬取规则的设置。

最后点击生成按钮即可完成代码的生成。

生成的代码示例结果如图所示,可见其结构和 Scrapy 代码是完全一致的。

生成代码之后,我们只需要像上述流程一样,把项目进行部署、启动就好了,不需要我们写任何一行代码,即可完成爬虫的编写、部署、控制、监测。

结语

以上便是 Gerapy 分布式爬虫管理框架的基本用法,如需了解更多,可以访问其 GitHub:https://github/Gerapy/Gerapy。

如果觉得此框架有不足的地方,欢迎提 Issue,也欢迎发 Pull Request 来贡献代码,如果觉得 Gerapy 有所帮助,还望赐予一个 Star!非常感谢!

转载请注明:静觅跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

Python大佬批量爬取中国院士信息,告诉你哪个地方人杰地灵 营销视频课程

img

埃里克

关注

院士(Academician)源于Academy, Academy是古希腊传说中的一位拯救雅典免遭劫难而牺牲的英雄,属于科学及学术界的最高荣誉头衔。哪里盛产生院士?python爬虫告诉你。

背景调研

目前中国院士共有1500余人,其中科学院院士799人,工程院院士875人。

科学院院士名单 http://casad.cas/chnl/371/index.html

工程院院士名单 http://cae/cae/html/main/col48/column_48_1.html

这里我以工程院院士信息抓取进行讲解。

工程院士出生地分布图

必备模块

通过 pip 安装scrapy 爬虫框架模块通过 pip 安装 jieba 分词模块通过 pip 安装win32api如果报ImportError: DLL load failed: 找不到指定的模块。 安装好后,把 D:Python27_64Libsite-packagespywin32_system32下的所有东西拷贝到C:WindowsSystem32下面

爬虫流程

在E盘下面建立文件夹project_scrapy,

建立爬虫项目 在E盘下面建立文件夹project_scrapy,进入该文件夹下面,打开cmd窗口,然后运行下面的命令搭建爬虫框架。 scrapy startproject engaca_spider 目录树如下:E:project_scrapy>tree /f卷 新加卷 的文件夹 PATH 列表卷序列号为 00000001 7009:36A5E:.└─engaca_spider │ scrapy.cfg │ └─engaca_spider │ items.py │ middlewares.py │ pipelines.py │ settings.py │ __init__.py │ └─spiders __init__.py

设置输出内容 在items.py 中添加如下内容# -*- coding: utf-8 -*- import scrapyclass EngacaSpiderItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() name = scrapy.Field() place = scrapy.Field() pass

在settings.py 中设置爬虫源头在settings.py 文件添加如下语句starturl = 'http://cae/cae/html/main/col48/column_48_1.html'省份列表文件 scrapy.cfg的同层文件夹中存放pro_list.txt链接:https://pan.baidu/s/1brg0MIz 密码:selo爬虫核心代码 在spiders文件夹下面建立 aca_spider.py#!python #coding: utf-8 import scrapyfrom scrapy.spiders import Spiderfrom scrapy.selector import Selector import refrom engaca_spider.settings import starturlfrom engaca_spider.items import EngacaSpiderItemfrom pprint import pprintimport jsonimport urllibfrom urlparse import urljoin import jiebapro_list =[ i.strip().decode('utf-8') for i in open("pro_list.txt").readlines()]class EngAcaSpider(Spider): ''' ''' name = "EngAca" #需要处理的http状态 handle_httpstatus_list = [404,403] def start_requests(self): ''' ''' yield scrapy.Request(starturl,self.getnames) def getnames(self,response): ''' ''' if response.status == 403: print 'meet 403, sleep 600 seconds' import time time.sleep(600) yield scrapy.Request(response.url, callback=self.getnames) #404,页面不存在,直接返回即可 elif response.status == 404: print 'meet 404, return' #正常处理 else: print "second:",response.url self.logger.info('a response from %s',response.url) names_li=response.selector.xpath('//li[@class="name_list"]/a') for name_li in names_li: ''' ''' items=EngacaSpiderItem() items['name']=name_li.xpath("./text()").extract_first() #unicode urlhref=name_li.xpath('./@href').extract_first() newurl=urljoin(response.url,urlhref) yield scrapy.Request(newurl,callback=self.getplaces,meta={'items':items}) def getplaces(self,response): ''' ''' items = response.meta['items'] # get first content; # 中英文 混用 .encode('gbk','ignore') 忽略英文空格 ptext=response.selector.xpath('//p[@class="intro"]/p[1]/text()').extract_first() content=ptext.split(u'。')[1] seg_list = jieba.cut(content) for place in seg_list: place=place.replace(u"省",'') place=place.replace(u"市",'') print "place:",place if place in pro_list: items['place']=place break else: items['place']='None' pprint(items) yield items

结果输出代码 在pipelines.py 处理输出内容,可以把内容保存到数据库或者文本中。 这里我直接保存到文本result.txt中。# -*- coding: utf-8 -*- class EngacaSpiderPipeline(object): def process_item(self, item, spider): return itemfrom pprint import pprintimport codecsclass ShopinfoPipeline(object): def process_item(self, item, spider): return itemclass JsonWithEncodingPipeline(object): def __init__(self): self.file = codecs.open('result.txt', 'w', encoding='utf-8') #保存为json文件 line="name place " self.file.write(line)#写入文件中 def process_item(self, item, spider): ''' ''' keylist=['name','place'] baseline="" for i in keylist: baseline+=item[i]+' ' baseline+=" " pprint(baseline) self.file.write(baseline)#写入文件中 def spider_closed(self, spider):#爬虫结束时关闭文件 self.file.close()

在settings.py指定输出管道ITEM_PIPELINES = { 'engaca_spider.pipelines.JsonWithEncodingPipeline': 300, }

运行爬虫

在这个目录scrapy.cfg的同层文件夹下打开cmd窗口运行爬虫,在该目录下生成结果文件result.txt。

scrapy crawl EngAca

利用pycharts进行数据可视化

参照教程,绘制地图热图。matplotlib[05]——微信好友的全国分布的热图

从这张图上,我们可以看出江苏院士最多,超过100人,人杰地灵当之无愧。

项目所有文件

链接:https://pan.baidu/s/1smligBN 密码:jdst

总结

这是最基本也是最重要的爬虫练习。里面没有涉及到JS加密、反爬措施。借助这个练习,可以熟悉爬虫框架。 数据预测未来,做事先人一步。

本文的代码直接就缩水了,如果想复制完整的代码,可以阅读原文。请搜索:python项目实践[02]爬虫——scrapy院士出生地分析

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP