第一次接触Scrapy 爬虫

时间:2022-05-27 06:13:03

参考博客 : http://aljun.me/post/4

首先安装 Scrapy  : 只有pip 安装不要使用sudo 另外需要安装相关的 依赖库

概念 : Scrapy 是一种python爬虫框架 PS:可以看下django

第一次接触Scrapy 爬虫

其中特别注意:1 下载器(Downloader):下载网页,并且将网页内容返回给Scrapy(建立在twisted)

                         2 爬虫(Spider):主要是干活的,提取自己需要的信息(item)

                         3 项目管道(pipeline)主要负责持久化实体,验证实体化的有效性,清楚不需要的信息    

 scrapy的流程,归纳如下:

                          1 首先下载器下载request回执的html等的response

                          2 然后下载器传给爬虫解析

                          3 接着爬虫解析后交给调度器过滤

                          4 最后交给管道,进行爬取数据的处理


scrapy项目文件包括:items.py(定制需要存储的文件的域) pipelin(scrapy定制管道)settings(设置相关参数)

和一个scrapy文件夹(定制爬虫)


定制爬虫:必须参数:name,start-url(启动事的url,一个python的list) parse(用来处理response进行处理)

                     使用内置的selector搜索器,用搜索器的xpath进行搜索,seletor的方法返回一定要用extract()方法,

                     来返回列表,再将数据保存在items,最后返回items,交给pipeline

class DoubanNewMoviePipeline(object):
    def __init__(self):
        self.file=codecs.open('douban_new_movie.json',mode='wb',encoding='utf-8')

    def process_item(self, item, spider):
        line='the new movie list:'+'\n'

        for i in range(len(item['movie_star'])):
            movie_name={'movie_name':str(item['movie_name'][i]).replace(' ','')}
            movie_star={'movie_star':item['movie_star'][i]}
            movie_url={'movie_url':item['movie_url'][i]}
            line=line+json.dumps(movie_name,ensure_ascii=False)
            line=line+json.dumps(movie_star,ensure_ascii=False)
        line=line+json.dumps(movie_url,ensure_ascii=False)+'\n'

        self.file.write(line)

    def close_spider(self,spider):
        self.file.close()

然后处理 pipeline

首先 把 json 和 codecs 包引入,codecs用来处理中文

           scrapy的pipeline一般包括startspider,proessitem,closespider 其中proessitem最为重要

            

 def process_item(self, item, spider):
        line='the new movie list:'+'\n'

        for i in range(len(item['movie_star'])):
            movie_name={'movie_name':str(item['movie_name'][i]).replace(' ','')}
            movie_star={'movie_star':item['movie_star'][i]}
            movie_url={'movie_url':item['movie_url'][i]}
            line=line+json.dumps(movie_name,ensure_ascii=False)
            line=line+json.dumps(movie_star,ensure_ascii=False)
        line=line+json.dumps(movie_url,ensure_ascii=False)+'\n'

        self.file.write(line)

然后在settings 加上

ITEM_PIPELINES={
    'douban_new_movie.pipelines.DoubanNewMoviePipeline':300,
}

最后 scrapy crawl douban_new_movie_spider 爬取

但是 我没有爬到

2018-06-05 22:49:18 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 http://movie.douban.com/chart>: HTTP status code is not handled or not allowed

2018-06-05 22:49:18 [scrapy.core.engine] INFO: Spider closed (finished)

wtf