100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 网络爬虫框架scrapy 初试 爬取豆瓣电影top250

网络爬虫框架scrapy 初试 爬取豆瓣电影top250

时间:2019-12-10 21:35:51

相关推荐

网络爬虫框架scrapy 初试 爬取豆瓣电影top250

以前一直用的网页级爬虫库(request),爬取了很多东西,12306余票,全国高校对四川招生,文章,图片等,不是说request不好才来学scrapy的,它们各有各自的优点和使用的场景。下面小小总结一下两者的区别:request网页级爬虫,爬取速度较慢,但是写出来的逻辑容易理解,也比较简单,适合爬虫初学者,而scrapy是一个系统的框架,功能全面,异步爬取,速度快,但是理解起来较难,不太适合新手入门,而且官网的scrapy中文文档看了,也未必能够理解scrapy框架....建议从request入门,理解爬虫的原理,再去学scrapy框架。

scrapy中文官方文档:https://scrapy-chs.readthedocs.io/zh_CN/latest/index.html

scrapy常用命令:

一:新建一个项目:

win+r cmd后 ,scrapy startproject +项目名 或者 在pycharm 的命令窗口一下也可以,因为用的pycharm

就在pycharm命令串口下命令的。

然后pycharm里面会自动生成一系列文件和配置文件以及文件夹,目录结构如下:

二:生成爬虫文件:scrapy genspider +爬虫名 +爬取的域名

在命令窗口执行: scrapy genspider doubanspider 生成一个名为doubanspider的爬虫文件

在spider文件下会有个doubanspider文件:

三:运行爬虫 scrapy crawl +spider下的爬虫文件名

命令窗口下:scrapy crawl doubandspider 运行如下有报403错:

需要把浏览器信息user-agent加上,在setting里面把user-agent注释取消,并且把user-agent浏览器信息加上。

user-agent信息在浏览器豆瓣电影F12开发者模式 ,刷新,然后点击network,在all里面随便点个文件,有很多请求信息,在request header 里面把user-agent复制下,粘贴到setting里面。

再次运行 scrapy crawl doubanspider:会显示rebot爬虫协议问题,在setting里面把

ROBOTSTXT_OBEY = True改为 ROBOTSTXT_OBEY = False 表示不遵守网站的reboot协议

四:打开items.py文件,在doubanmovieItem下定义item容器,方便数据存取,以及数据库的表的建立(和django中的module相似)

# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# /en/latest/topics/items.htmlimport scrapyclass DoubanmovieItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()serial_number=scrapy.Field()#序号movie_name=scrapy.Field()#电影名称introduce=scrapy.Field()#电影介绍star_score=scrapy.Field()#评分comments=scrapy.Field()#评论describe=scrapy.Field()#电影描述

五:把doubanspider编写完成

提取方法用的是xpath(真的很简单,菜鸟教程中等等都可以学习,很快就会掌握,scrapy shell练习方便理解掌握),还有很多其他提取方法,re,css(也很简单,标准的html规范),bs4等

菜鸟教程xpath教程:/xpath/xpath-tutorial.html

# -*- coding: utf-8 -*-import scrapyfrom ..items import *class DoubanspiderSpider(scrapy.Spider):name = 'doubanspider' #爬虫名字,名字必须唯一allowed_domains = [''] #爬取的域名,只允许爬取列表内的域名,为空则允许爬取所有域名start_urls = ['/top250']#入口url#默认解析方法def parse(self, response):movie_list=response.xpath('//div[@class="article"]//ol//li')#xpath提取所有电影都在li标签这中item=DoubanmovieItem()#item容器导入for movie in movie_list:item['serial_number']=movie.xpath('.//em/text()').extract_first()#提取em标签中的序号item['movie_name']=movie.xpath('.//span[@class="title"][1]/text()').extract_first()#提取span标签中电影名字temp=movie.xpath('.//div[@class="info"]//p[1]/text()').extract()infos=""for info in temp:infos+="".join(info.split())#去掉介绍里面空格以及换行item['introduce']=infos#提取电影介绍item['star_score']=movie.xpath('.//div[@class="star"]//span[@class="rating_num"]/text()').extract_first()#提取评分item['comments_num']=movie.xpath('.//div[@class="star"]//span[4]/text()').extract_first()#评论人数item['describe']=movie.xpath('.//p[@class="quote"]//span/text()').extract_first()#电影描述yield item#next_url=response.xpath('//span[@class="next"]/link/@href').extract_first()if next_url:yield scrapy.Request("/top250"+next_url,callback=self.parse)

六:运行爬虫 scrapy crawl +爬虫名

scrapy scrawl doubanspider 就能运行这个爬虫,会看到爬取的数据,以及显示的爬取状态,请求次数,深度,响应次数,调度次数....不得不说相比request scrapy真的很快

温馨提示:在命令窗口不怎么方便观察,可以在运行爬虫的命令后面追加 -o 文件名.后缀格式(.csv.json等)

eg:scrapy crawl doubanspider -o bandou.csv

运行结束后,点击一下爬虫文件,就会看到有个保存的文件,如下:

在csv文件里面,最上面一行,是我们在item定义的字段,每一个字段对应一列内容,知识没有对齐,可以看到倒数第二列就是序号,翻到csv文件最后,看最后一行倒数第二列,可以看到序号为250说明,我们爬取的数据都保存完毕,爬取十分成功!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。