人人都能做爬虫 | Python爬虫工具Scrapy入门案例介绍(1) | 基础技能包

2020-08-04 15:59:44 浏览数 (1)

人工智能技术的发展离不开大量数据的支撑,如何从浩瀚的互联网世界中获取需要的数据是必须掌握的一项技能,而爬虫技术是一项老少皆宜能够很好解决上述问题的手段,不管是做智能投顾还是做舆情分析,不管是图像数据还是文字数据,合理利用爬虫技术获取想要的数据,是智能技术在各行各业广泛应用的重要基础。本文将结合一个简单的案例对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的代码做了适当修改,本来想借用校花网那个案例,无奈校花网登不上去了,比较遗憾,不过感谢作者孔扎根给我们带来了非常好的两个案例。同时,爬虫技术其实可以干很多想得到和想不到的很有意思的事情,掌握了基本的套路之后,后面就看各位丰富的想象力了。

0 人点赞