Scrapy框架爬取豆瓣电影top250信息
点击上方蓝色小字,关注“涛哥聊Python”
重磅干货,第一时间送达
作者:叶庭云
CSDN:https://blog.csdn.net/fyfugoyfa
一、分析网页
目标URL:https://movie.douban.com/top250?start=0&filter=
每一页有25条电影信息,总共10页。检查网页可以发现,每条电影的详细信息在 ol class="grid_view" 下的 li 标签里。
翻页查看网页可以发现URL变化的规律,在第 page 页,URL为:f'https://movie.douban.com/top250?start={(page-1) * 25} &filter='
在编写 scrapy 爬虫时,可以构造出 10 页的URL,生成10次请求。
二、scrapy爬虫
编写scrapy爬虫,电影信息保存到 csv 文件,电影海报保存到本地文件夹。
创建项目
scrapy startproject Douban_movie_top250
cd Douban_movie_top250
scrapy genspider Douban movie.douban.com
构造请求
Douban.py中定义 start_requests() 方法,爬取十页的电影信息,生成10次请求,代码如下:
def start_requests(self):for i in range(10):url = f'https://movie.douban.com/top250?start={25 * i}&filter='yield Request(url=url, callback=self.parse)
编写 items.py
import scrapyclass DoubanMovieTop250Item(scrapy.Item):# 定义 Item 数据结构name = scrapy.Field()pic_link = scrapy.Field()rank = scrapy.Field()director_actor = scrapy.Field()info = scrapy.Field()rating_score = scrapy.Field()rating_num = scrapy.Field()introduce = scrapy.Field()
编写 Douban.py
Spider类定义了如何爬取某个(或某些)网站,包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(抓取item)
import scrapy
from scrapy import Request
from Douban_movie_top250.items import DoubanMovieTop250Itemclass DoubanSpider(scrapy.Spider):name = 'Douban'allowed_domains = ['movie.douban.com']def start_requests(self):for i in range(10):url = f'https://movie.douban.com/top250?start={25 * i}&filter='yield Request(url=url, callback=self.parse)def parse(self, response, **kwargs):# Xpath定位提取数据 遍历 获取每一条电影的详细信息for li in response.xpath("//ol[@class='grid_view']/li"):item = DoubanMovieTop250Item()item['rank'] = li.xpath(".//div[@class='pic']/em/text()").extract_first()item['name'] = li.xpath(".//div[@class='hd']/a/span[@class='title']/text()").extract_first()item['pic_link'] = li.xpath(".//div[@class='pic']/a/img/@src").extract_first()item['info'] = li.xpath(".//div[@class='bd']/p/text()").extract()[1].strip()item['director_actor'] = li.xpath(".//div[@class='bd']/p/text()").extract_first().strip()item['rating_score'] = li.xpath(".//div[@class='star']/span[2]/text()").extract_first()item['rating_num'] = li.xpath(".//div[@class='star']/span[4]/text()").extract_first()item['introduce'] = li.xpath(".//p[@class='quote']/span/text()").extract_first()yield item
编写管道文件 pipelines.py
还要将电影海报一起下载下来,所以需要编写管道文件 pipelines.py,Scrapy 提供了专门处理下载的 Pipeline,包括文件下载和图片下载。下载文件和图片的原理与抓取页面的原理一样,因此下载过程支持异步和多线程,十分高效。
from scrapy.pipelines.images import ImagesPipeline # scrapy图片下载器
from scrapy import Request
from scrapy.exceptions import DropItemclass DoubanMovieTop250Pipeline(ImagesPipeline):# 请求下载图片def get_media_requests(self, item, info):yield Request(item['pic_link'], meta={'name': item['name']})def item_completed(self, results, item, info):# 分析下载结果并剔除下载失败的图片image_paths = [x['path'] for ok, x in results if ok]if not image_paths:raise DropItem("Item contains no images")return item# 重写file_path方法,将图片以原来的名称和格式进行保存def file_path(self, request, response=None, info=None):name = request.meta['name'] # 接收上面meta传递过来的图片名称file_name = name + '.jpg' # 添加图片后缀名return file_name
配置文件 settings.py
# settings.pyBOT_NAME = 'Douban_movie_top250'SPIDER_MODULES = ['Douban_movie_top250.spiders']
NEWSPIDER_MODULE = 'Douban_movie_top250.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24'# Obey robots.txt rules
ROBOTSTXT_OBEY = False# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 10# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0.25# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'Douban_movie_top250.pipelines.DoubanMovieTop250Pipeline': 300,
}
IMAGES_STORE = './Douban_pic' # 图片保存路径
运行程序
# 切换路径到img_spider的目录
scrapy crawl Douban -o movies_info.csv
运行效果如下:
scrapy爬虫在 2020-08-28 16:56:14启动,输出了 Scrapy 的版本和一些配置信息,之后爬虫一边爬取一边下载,下载速度非常快。2020-08-28 16:56:45 scrapy爬虫完成了电影信息和海报的爬取。
运行结果如下:
三、处理数据
用scrapy框架爬取电影信息时,支持异步、并发,爬取效率很高,但输出到 CSV 文件里列名并没有按照 item 赋值时的顺序,每行的电影信息页没有按照排名排序,将数据处理一下并重新保存到Excel。
import pandas as pddf4 = pd.read_csv('movies_info.csv')
cols = df4.columns[[5, 3, 0, 1, 6, 7, 2, 4]] # 交换列的位置 自定义
new_df4 = df4[cols]
new_df4.sort_values(by='rank', inplace=True) # 按排名排序
new_df4.to_excel('moives_info.xlsx', index=False) # 重新保存到Excel
运行效果如下:
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。文章对你有所帮助的话,欢迎给个赞或者 star 呀,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习呀。
Scrapy框架爬取豆瓣电影top250信息相关推荐
- 杀鸡用用牛刀 scrapy框架爬取豆瓣电影top250信息
文章目录 一.分析网页 二.scrapy爬虫 三.处理数据 原文链接:https://yetingyun.blog.csdn.net/article/details/108282786 创作不易,未经 ...
- 03_使用scrapy框架爬取豆瓣电影TOP250
前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...
- python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格
豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...
- 用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型
文章目录 前言 一.Scrapy爬虫爬取豆瓣电影 1. Scrapy框架介绍 (1) Scrapy框架构造: (2) 数据流 (3) 项目结构 2. 创建爬虫爬取豆瓣 (1)创建项目 (2) 创建It ...
- 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分
安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...
- 爬虫框架scrapy,爬取豆瓣电影top250
1 . 新建项目 进入打算存储代码的目录,命令行运行如下语句 scrapy startproject tutorial 2 . 定义Item import scrapyclass DoubanItem ...
- scrapy1.3爬取豆瓣电影top250
学习<爬虫框架scrapy,爬取豆瓣电影top250>,用scrapy1.3实践,记录学习过程 1 . 新建项目 进入打算存储代码的目录,命令行运行如下语句 scrapy startpro ...
- 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云
基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...
- 爬虫利器初体验 scrapy,爬取豆瓣电影
目录 前言 scrapy 数据流 scrapy 组件 爬取豆瓣电影 Top250 后记 送书后话 前言 为什么要学 scrapy 呢?看下图中的招聘要求,就清楚了.很多招聘要求都有 scrapy,主要 ...
最新文章
- php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
- apache+svn服务搭建
- 如何判断数组是静态还是动态分配的
- CLion 下使用 Valgrind 内存检查 [Mac;Linux;Window多平台]
- 【3】Keras.applications包,一堆可以复用的深度学习模型库
- python 代码分块_python大数据分块处理
- 搜狗输入法遗留文件sogouInput删除方法(此方法适合大部分流氓软件)
- win7 ie11版本安装报此更新不适用于计算机问题
- 国内镜像源的使用,提高下载速度
- 安装VS2010旗舰版时出现.Net framework4.0,安装失败
- 华为AR系列路由器密码重置
- vue 实现 高德地图 api 掩模、定位、天气
- gitbook 转换 pdf
- 请问如何使IE支持有swing的aaplet?
- golang长连接和短连接的那些事儿
- DevExpress 20.2.3有源码吗?一名鱼友刚刚问我的
- [Violet]蒲公英(分块)
- Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (defau-cli) on project
- Ubuntu18.04修改iBus输入法快捷键
- chrome浏览器插件程序包失效解决办法
热门文章
- 开源FTP 服务器 FileZilla Server
- 软件封装-单文件打包
- Office在线预览-永中
- 《大型网站技术架构:核心原理与案例分析》.pdf——架构系列必看20本技术书籍
- 印象笔记 离线版_印象笔记pc版离线
- 苹果鼠标滚轮驱动_如何挑选一款适合自己的游戏鼠标
- 查看局域网所有ip地址
- 《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么
- 编程c语言中文图形代码,C语言图形编程代码
- win7使用命令提示符怎么运行C语言,Win7如何打开命令行窗口?Win7打开命令提示符的多种方法...