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

以前一直用的网页级爬虫库(),爬取了很多东西,12306余票,全国高校对四川招生,文章,图片等,不是说不好才来学的,它们各有各自的优点和使用的场景 。下面小小总结一下两者的区别:网页级爬虫,爬取速度较慢,但是写出来的逻辑容易理解,也比较简单,适合爬虫初学者,而是一个系统的框架,功能全面,异步爬取,速度快,但是理解起来较难,不太适合新手入门,而且官网的中文文档看了,也未必能够理解框架....建议从入门,理解爬虫的原理,再去学框架 。
中文官方文档:
常用命令:
一:新建一个项目:
win+r cmd后,+项目名 或者 在 的命令窗口一下也可以,因为用的
就在命令串口下命令的 。
然后里面会自动生成一系列文件和配置文件以及文件夹,目录结构如下:
二:生成爬虫文件:+爬虫名 +爬取的域名
在命令窗口执行:生成一个名为的爬虫文件
【网络爬虫框架scrapy 初试 爬取豆瓣电影top250】在文件下会有个文件:

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

文章插图
三:运行爬虫crawl +下的爬虫文件名
命令窗口下: crawl运行如下有报403错:
需要把浏览器信息user-agent加上,在里面把user-agent注释取消,并且把user-agent浏览器信息加上 。
user-agent信息在浏览器豆瓣电影F12开发者模式,刷新,然后点击,在all里面随便点个文件,有很多请求信息,在里面把user-agent复制下,粘贴到里面 。
再次运行crawl :会显示rebot爬虫协议问题,在里面把
ROBOTSTXT_OBEY = True改为 ROBOTSTXT_OBEY = False 表示不遵守网站的reboot协议
四:打开items.py文件,在下定义item容器,方便数据存取,以及数据库的表的建立(和中的相似)
# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# https://doc.scrapy.org/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()#电影描述
网络爬虫框架scrapy 初试 爬取豆瓣电影top250

文章插图
五:把编写完成
提取方法用的是xpath(真的很简单,菜鸟教程中等等都可以学习,很快就会掌握,shell练习方便理解掌握),还有很多其他提取方法,re,css(也很简单,标准的html规范),bs4等
菜鸟教程xpath教程:
# -*- coding: utf-8 -*-import scrapyfrom ..items import *class DoubanspiderSpider(scrapy.Spider):name = 'doubanspider'#爬虫名字,名字必须唯一allowed_domains = ['movie.douban.com'] #爬取的域名,只允许爬取列表内的域名,为空则允许爬取所有域名start_urls = ['https://movie.douban.com/top250']#入口url#默认解析方法def parse(self, response):movie_list=response.xpath('//div[@class="e944-3083-e04c-6713 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="3083-e04c-6713-5938 title"][1]/text()').extract_first()#提取span标签中电影名字temp=movie.xpath('.//div[@class="e04c-6713-5938-b5c5 info"]//p[1]/text()').extract()infos=""for info in temp:infos+="".join(info.split())#去掉介绍里面空格以及换行item['introduce']=infos#提取电影介绍item['star_score']=movie.xpath('.//div[@class="6713-5938-b5c5-c2ce star"]//span[@class="5938-b5c5-c2ce-2d51 rating_num"]/text()').extract_first()#提取评分item['comments_num']=movie.xpath('.//div[@class="b5c5-c2ce-2d51-defa star"]//span[4]/text()').extract_first()#评论人数item['describe']=movie.xpath('.//p[@class="c2ce-2d51-defa-3152 quote"]//span/text()').extract_first()#电影描述yield item#next_url=response.xpath('//span[@class="2d51-defa-3152-3535 next"]/link/@href').extract_first()if next_url:yield scrapy.Request("https://movie.douban.com/top250"+next_url,callback=self.parse)