点击上方蓝色小字,关注“涛哥聊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信息相关推荐

  1. 杀鸡用用牛刀 scrapy框架爬取豆瓣电影top250信息

    文章目录 一.分析网页 二.scrapy爬虫 三.处理数据 原文链接:https://yetingyun.blog.csdn.net/article/details/108282786 创作不易,未经 ...

  2. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  3. python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格

    豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...

  4. 用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型

    文章目录 前言 一.Scrapy爬虫爬取豆瓣电影 1. Scrapy框架介绍 (1) Scrapy框架构造: (2) 数据流 (3) 项目结构 2. 创建爬虫爬取豆瓣 (1)创建项目 (2) 创建It ...

  5. 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分

    安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...

  6. Python 采用Scrapy爬虫框架爬取豆瓣电影top250

    scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...

  7. 爬虫框架scrapy,爬取豆瓣电影top250

    1 . 新建项目 进入打算存储代码的目录,命令行运行如下语句 scrapy startproject tutorial 2 . 定义Item import scrapyclass DoubanItem ...

  8. scrapy1.3爬取豆瓣电影top250

    学习<爬虫框架scrapy,爬取豆瓣电影top250>,用scrapy1.3实践,记录学习过程 1 . 新建项目 进入打算存储代码的目录,命令行运行如下语句 scrapy startpro ...

  9. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云

    基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...

  10. 爬虫利器初体验 scrapy,爬取豆瓣电影

    目录 前言 scrapy 数据流 scrapy 组件 爬取豆瓣电影 Top250 后记 送书后话 前言 为什么要学 scrapy 呢?看下图中的招聘要求,就清楚了.很多招聘要求都有 scrapy,主要 ...

最新文章

  1. php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
  2. apache+svn服务搭建
  3. 如何判断数组是静态还是动态分配的
  4. CLion 下使用 Valgrind 内存检查 [Mac;Linux;Window多平台]
  5. 【3】Keras.applications包,一堆可以复用的深度学习模型库
  6. python 代码分块_python大数据分块处理
  7. 搜狗输入法遗留文件sogouInput删除方法(此方法适合大部分流氓软件)
  8. win7 ie11版本安装报此更新不适用于计算机问题
  9. 国内镜像源的使用,提高下载速度
  10. 安装VS2010旗舰版时出现.Net framework4.0,安装失败
  11. 华为AR系列路由器密码重置
  12. vue 实现 高德地图 api 掩模、定位、天气
  13. gitbook 转换 pdf
  14. 请问如何使IE支持有swing的aaplet?
  15. golang长连接和短连接的那些事儿
  16. DevExpress 20.2.3有源码吗?一名鱼友刚刚问我的
  17. [Violet]蒲公英(分块)
  18. Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (defau-cli) on project
  19. Ubuntu18.04修改iBus输入法快捷键
  20. chrome浏览器插件程序包失效解决办法

热门文章

  1. 开源FTP 服务器 FileZilla Server
  2. 软件封装-单文件打包
  3. Office在线预览-永中
  4. 《大型网站技术架构:核心原理与案例分析》.pdf——架构系列必看20本技术书籍
  5. 印象笔记 离线版_印象笔记pc版离线
  6. 苹果鼠标滚轮驱动_如何挑选一款适合自己的游戏鼠标
  7. 查看局域网所有ip地址
  8. 《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么
  9. 编程c语言中文图形代码,C语言图形编程代码
  10. win7使用命令提示符怎么运行C语言,Win7如何打开命令行窗口?Win7打开命令提示符的多种方法...