人工智能技术的发展离不开大量数据的支撑,如何从浩瀚的互联网世界中获取需要的数据是必须掌握的一项技能,而爬虫技术是一项老少皆宜能够很好解决上述问题的手段,不管是做智能投顾还是做舆情分析,不管是图像数据还是文字数据,合理利用爬虫技术获取想要的数据,是智能技术在各行各业广泛应用的重要基础。本文将结合一个简单的案例对Python环境下的Scrapy爬虫框架进行介绍,希望可以让初学者能够快速的找到当爬虫的感觉。
步骤1:安装 Scrapy 爬虫框架
Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取爬虫框架,用于抓取web站点并从页面中提取结构化的数据。如果想系统的学习Scrapy教程,推荐网站:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html ,。
本文是给出一个直观的案例,因此就直接安装使用了,在cmd命令提示符中输入:
pip install Scrapy
安装完成后检查Scrapy是否安装完成,输入命令scrapy – v,如果出现下图结果,说明安装成功。
但很不幸,大部分人都会出现“'scrapy' 不是内部或外部命令,也不是可运行的程序或批处理文件。”这样的提示,这说明安装并没有成功,此时需要切换到手动安装。
手动安装就是下载相应的模块,可以度娘找到手动安装教程,本人用的是Anaconda 3,自带Python 3.6版本,手动安装时只需要安装Twisted和Scrapy两个whl文件模块,模块下载网站https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,下载时根据操作系统和Python版本选择对应文件,安装命令为:
pip install Twisted-18.4.0-cp36-cp36m-win_amd64.whl
pip install Scrapy-1.5.0-py2.py3-none-any.whl
注:本人最初安装的是Anaconda3,默认python版本是3.6,而pip版本号是9.0.1,此时pip命令报错显示无法安装,解决方法是更新pip至最新版本,更新方式为在 Windows命令提示符(cmd)中输入:python -m pip install -U pip。
步骤2:初始化一个Scrapy项目
目前,Scrapy项目的初始化还需通过手动方式进行,创建方式为在cmd命令提示符中输入:scrapy startproject [项目名称],需要说明的是该命令执行后,会在当前命令符指向目录中创建以项目名称为名字的文件夹,因此在创建之前,先选择好创建地址。
往下我们将结合一个案例讲解如何在python下使用Scrapy爬虫,这个例子是从一个电影网站(美剧天堂:http://www.meijutt.com/new100.html)抓取最新更新的美剧名目。
首先,在 Windows命令提示符(cmd)中输入:
scrapy startproject movie
其次,创建爬虫程序,爬虫程序需要进入到创建的movie目录下创建,具体如下:
cd movie
scrapy genspider meiju meijutt.com
通常,创建爬虫文件都是用网站域名命名。到这里,所有的准备工作就做完了,在movie文件夹中应该会看到下述文件:
几个关键文件的定位如下:
• scrapy.cfg:项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。
• items.py:设置数据存储模板,用于结构化数据。
• pipelines.py:数据处理行为,如一般结构化的数据持久化等。
• settings.py:配置文件,如递归的层数、并发数,延迟下载等。
• spiders:爬虫目录,最核心的爬虫代码放在这个目录下,本案例为meiju.py。
步骤3:代码编写
(1)items.py
主要用于设置数据存储模板,本案例代码如下:
import scrapy
class MovieItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name = scrapy.Field()
(2)meiju.py
核心的爬虫代码,也是最体现功力和工作量的地方,本案例代码如下:
# -*- coding: utf-8 -*-
import scrapy
from movie.items import MovieItem
class MeijuSpider(scrapy.Spider):
name = "meiju"
allowed_domains = ["meijutt.com"]
start_urls = ['http://www.meijutt.com/new100.html']
def parse(self, response):
movies = response.xpath('//ul[@class="top-list fn-clear"]/li')
for each_movie in movies:
item = MovieItem()
item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
yield item
这里name = "meiju"定义了爬虫工具的名字为“meiju”,后续爬虫执行时直接输入这个名字。
(3)settings.py
此文档用于设置配置文件,本案例增加如下代码
ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}
(4)pipelines.py
此处编写数据处理脚本,如数据存储等在这里进行编写,本案例代码如下
class MoviePipeline(object):
def process_item(self, item, spider):
with open("my_meiju.txt",'a') as fp:
fp.write(item['name'] ' ')
步骤4:执行爬虫
爬虫带来的那种从大量繁琐低价值体力劳动中解放出来的快感,个人感觉是其最大的魅力所在,而到这里,就可以开始通透的体验一下爬虫程序的威力了。
在 Windows命令提示符(cmd)中,进入到项目“movie”目录下,输入下述命令scrapy crawl meiju,系统自动开始爬文件,存信息。本案例最后的结果存储在项目文件下的“my_meiju.txt”文件中,结果如下:
本文案例来自于https://www.cnblogs.com/kongzhagen/p/6549053.html ,对pipelines.py的代码做了适当修改,本来想借用校花网那个案例,无奈校花网登不上去了,比较遗憾,不过感谢作者孔扎根给我们带来了非常好的两个案例。同时,爬虫技术其实可以干很多想得到和想不到的很有意思的事情,掌握了基本的套路之后,后面就看各位丰富的想象力了。