文本分类的第一项应该就是获取文本了吧。
在木有弄懂scrapy的情况下写的,纯应用,或许后续会补上scrapy的原理。
首先说一下我的环境:ubuntu14.10
scrapy安装指南(肯定官网的最权威了):[传送门](http://scrapy-chs.readthedocs.org/zh_CN/0.24/intro/install.html#intro-install)
需要完成的任务:
- 创建一个Scrapy项目
- 定义提取的Item
- 编写爬取网站的Spider并提取Item
- 编写Item Pipeline来存储提取到的Item
正式开始
新建scrapy项目
在命令行下:
scrapy startproject tech163
执行完程序后,将会有如下结构:
tech163/
scrapy.cfg
tech163/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
定义item
打开items.py
news_thread: 定义获取新闻的进程
news_title:获取新闻标题
news_url:获取新闻地址
news_time:获取新闻发布时间
news_from:获取发布者
from_url:获取。。。
news_body:获取新闻正文
定义spider
在spider目录下新建news_spider.py。必须继承scrapy.Spider类,且需要定义以下三个属性:
- name:用于区别Spider。该名字必须是唯一的。不可以为不同的Spider设置相同的名字。
start_url:包含了Spider在启动时进行爬取的URL列表。因此,第一个被获取的页面将是其中之一。后续的url则是从出事的url获取到的数据中提取。可以使用正则表达式定义和过滤需要进行跟进的链接。
parse():是spider的一个方法。被调用时,每个初始url完成下载后生成的response对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据、提取数据(生成item)以及生成需要进一步处理的url的response对象。
selectors选择器
scrapy使用了一种基于XPath和CSS表达式机制:Scrapy Selectors。
我们使用XPath来从页面的HTML源码中选择需要提取的数据。简单说一下XPath的用法。
- /html/head/title:选择HTML文档中<head>标签内的<title>元素
- /html/head/title/text():选择上面提到的<title>元素的文字
- //td:选择所有的<td>元素
- //div[@class=”mine”]:选择所有具有class=“mine”元素(2015/12/4/21:37)
以一篇网易的科技类的新闻进行说明:新闻网址