Scrapy

scrapy是一个python框架,可以爬取网站数据。
官方文档:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html

具体网上很多Scrapy的讲解,可自行百度,官方文档也非常详细,安装流程可直接查看官方文档,下面只简单写下流程

Demo

1.创建工程

scrapy startproject movie

2.创建爬虫

cd movie
scrapy genspider imovhub imovhub.com
//第一个imovhub是爬虫名,第二个是对应要爬的域名

3.创建完后目录为下

imovhub.py
主要文件,里面的parse方法可以解析爬到的response数据。
items.py
里面定义了数据对应的Model。
pipelines.py
用来处理数据的管道,一般做数据保存等。
settings.py
配置文件,配置递归层数,并发数,延迟下载等。
middlewares.py
中间件,里面有两个类,一个spider middlewares,处理spider的response和items及requests,一个Downloader middlewars,处理downloader传递给引擎的response。

4.开始编写爬虫

首先看settings.py里,有一项比较重要的

# Obey robots.txt rules
ROBOTSTXT_OBEY = True

这个是用来控制是否遵守要爬的网站里的robots.txt协议的。比如百度的:http://www.baidu.com/robots.txt
为True的时候,如果我们编写的爬虫不在协议里,那么scrapy会自己停止,所以我们一般设置为flase。

接下来看items.py
我们在里面添加我们数据model的成员变量就行

class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    name  = scrapy.Field()
    title  = scrapy.Field()

然后是pipelines.py
我们在这里处理数据序列化等

class MoviePipeline(object):
    def process_item(self, item, spider):
        with open('moive.txt','a') as fp:
            fp.write(item['name'].encode("utf8") +'\n')

上面的代码大概意思就是打开或生成movie.txt文件,然后再里面写入我们item对象里name的值

最后是spiders目录里的imovhub.py文件,这个文件名是之前创建工程时候生成的,不同工程名都不一样,我们在这文件里,编写解析爬虫爬到的数据。

import scrapy
from movie.items import MovieItem #导入我们的Item对象

class ImovhubSpider(scrapy.Spider):
    name = 'imovhub'
    allowed_domains = ['imovhub.com']
    start_urls = ['http://imovhub.com/']

    def parse(self, response):
        movies = response.xpath('//div[@class="moive"]')
        for each_movie in movies:
            item = MovieItem()
            item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
            yield item

parse方法里处理解析,参数response其实就是爬虫爬到的html文件数据,我们通过解析html里的xml数据拿到我们想要的东西,xpath方法是用来获取xml数据的。

打开我们要爬的网站,进入浏览器的调试模式,查看网页的xml结构

电影封面对应的节点是div class=”moive”,解析这个节点就能获取movies列表,然后再for循环遍历moives列表,找到子节点,找到电影的标题,获取电影名称。