云端内容采集(利用轻量级爬虫框架scrapy来进行数据采集的基本方法(图) )

优采云 发布时间: 2022-02-17 20:09

  云端内容采集(利用轻量级爬虫框架scrapy来进行数据采集的基本方法(图)

)

  在这个“大数据”和“人工智能”的时代,数据分析和挖掘逐渐成为互联网从业者的必备技能。本文介绍使用轻量级爬虫框架scrapy处理数据的基本方法采集。

  一、scrapy简介

  scrapy是一套用Python编写的异步爬虫框架,基于Twisted实现,运行于Linux/Windows/MacOS等环境,具有速度快、扩展性强、使用方便等特点。即使是新手也能快速掌握并编写所需的爬虫程序。scrapy 可以在本地运行,也可以部署到云端(scrapyd),实现真正的生产级数据采集系统。

  我们通过一个示例来学习如何使用scrapy 来采集来自网络的数据。《博客园》是全面的技术资料网站,这次我们的任务是采集的网站 MySQL 类

  以下所有文章的标题、摘要、发布日期和阅读次数,共4个字段。最终结果是一个收录所有 4 个字段的文本文件。如图所示:

  

  最终得到的数据如下,每条记录有四行,分别是标题、阅读次数、发布时间、文章摘要:

  

  二、安装scrapy

  让我们看看如何安装scrapy。首先,您的系统中必须有 Python 和 pip。本文以最常见的 Python2.7.5 版本为例。pip 是 Python 的包管理工具,一般 Linux 系统默认安装。在命令行输入以下命令并执行:

  sudo pip install scrapy -i http://pypi.douban.com/simple –trusted-host=pypi.douban.com 

  pip会从豆瓣的软件源下载安装scrapy,所有依赖包都会自动下载安装。“sudo”表示以超级用户权限执行此命令。在所有进度条完成后,如果提示类似“Successfully installed Twisted, scrapy ...”,则安装成功。

  三、scrapy 交互环境

  scrapy 还提供了一个交互式 shell,可以用来轻松地测试解析规则。scrapy安装成功后,在命令行输入scrapy shell,启动scrapy的交互环境。scrapy shell的提示符是三个大于号>>>,表示可以接收命令。我们首先使用 fetch() 方法获取首页内容:

  >>> fetch( “https://www.cnblogs.com/cate/mysql/” ) 

  如果屏幕显示如下输出,则表示已获取网页内容。

  2017-09-04 07:46:55 [scrapy.core.engine] INFO: Spider opened 2017-09-04 07:46:55 [scrapy.core.engine] DEBUG: Crawled (200)   (referer: None) 

  获得的响应将保存在响应对象中。此对象的 status 属性表示 HTTP 响应状态,通常为 200。

  >>> print response.status 200 

  text 属性表示返回的内容数据,从中可以解析出需要的内容。

  >>> print response.text  u'\r\n\r\n\r\n     \r\n     \r\n     \r\n     MySQL – \u7f51\u7ad9\u5206\u7c7b – \u535a\u5ba2\u56ed\r\n         ’ 

  可以看出是一堆乱七八糟的HTML代码,无法直观的找到我们需要的数据。这时候我们可以通过浏览器的“开发者工具”获取指定数据的DOM路径。用浏览器打开网页后,按F12键启动开发者工具,快速定位到指定内容。

  

  可以看到我们需要的4个字段在/body/div(id=”wrapper”)/div(id=”main”)/div(id=”post_list”)/div(class=”post_item”)/ div(class=”post_item_body”) / ,每个“post_item_body”收录一篇文章文章的标题、摘要、发表日期和阅读次数。我们首先得到所有的“post_item_body”,然后从中解析出每个文章的4个字段。

  >>> post_item_body = response.xpath( “//div[@id=’wrapper’]/div[@id=’main’]/div[@id=’post_list’]/div[@class=’post_item’]/div[@class=’post_item_body’]” ) >>> len( post_item_body ) 20 

  响应的 xpath 方法可以使用 xpath 解析器来获取 DOM 数据。xpath的语法请参考官网文档。您可以看到我们在主页上获得了 文章 的所有 20 个 post_item_body。那么如何提取每个文章的这4个字段呢?

  我们以第一篇文章文章为例。先取第一个 post_item_body:

  >>> first_article = post_item_body[ 0 ] 

  标题在 post_item_body 节点下的 h3/a 中。xpath方法中text()的作用是取当前节点的文本,而extract_first()和strip()提取xpath表达式中的节点,过滤掉前后空格和回车:

  >>> article_title = first_article.xpath( “h3/a/text()” ).extract_first().strip() >>> print article_title Mysql之表的操作与索引操作 

  然后以类似的方式提取 文章 抽象:

  >>> article_summary = first_article.xpath( “p[@class=’post_item_summary’]/text()” ).extract_first().strip() >>> print article_summary 表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id int auto_increment, uname varchar(20), address varch … 

  提取post_item_foot时,发现提取了两组内容,***组为空内容,第二组为文字“Published in XXX”。我们提取第二组内容并过滤掉“published on”这个词:

  >>> post_date = first_article.xpath( “div[@class=’post_item_foot’]/text()” ).extract()[ 1 ].split( “发布于” )[ 1 ].strip() >>> print post_date 2017-09-03 18:13 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线