简述

为了练习简单的Pandas操作,我用Scrapy爬取了豆瓣Top250的电影信息。Top250页面展现的电影信息和具体电影页面所呈现的内容有些不同(比如演员信息),所以爬取总共用了两部分代码。此外为了防止被ban,还进行了一些简单的配置。


第一部分代码:

# -*- coding:utf-8 -*-
# 爬虫类需要继承scrapy下的Spider类。
import scrapyclass douban_movie_spider(scrapy.Spider):# 项目的启动名name = "douban_movie"# 如果网站设置有防爬措施,需要添加上请求头信息,不然会爬取不到任何数据headler = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 ''Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}# 开始链接start_urls = ['https://movie.douban.com/top250']# start_requests方法为scrapy的方法,我们对它进行重写。def start_requests(self):# 将start_url中的链接通过for循环进行遍历。for url in self.start_urls:# 通过yield发送Request请求。# 这里的Reques注意是scrapy下的Request类。注意不到导错类了。# 这里的有3个参数:#        1、url为遍历后的链接#        2、callback为发送完请求后通过什么方法进行处理,这里通过parse方法进行处理。#        3、如果网站设置了防爬措施,需要加上headers伪装浏览器发送请求。yield scrapy.Request(url=url, callback=self.parse, headers=self.headler)# 重写parse对start_request()请求到的数据进行处理def parse(self, response):# 这里使用scrapy的css选择器,既然数据在class为item的div下,那么把选取范围定位div.itemfor quote in response.css('div.item'):# 通过yield对网页数据进行循环抓取yield {# 我们抓取排名、电影名、导演、主演、上映日期、制片国家 / 地区、类型,评分、评论数量、一句话评价以及电影链接"排名": quote.css('div.pic em::text').extract(),"电影名": quote.css('div.info div.hd a span.title::text')[0].extract(),"上映年份": quote.css('div.info div.bd p::text')[1].extract().split('/')[0].strip(),"制片国家": quote.css('div.info div.bd p::text')[1].extract().split('/')[1].strip(),"类型": quote.css('div.info div.bd p::text')[1].extract().split('/')[2].strip(),"评分": quote.css('div.info div.bd div.star span.rating_num::text').extract(),"评论数量": quote.css('div.info div.bd div.star span::text')[1].re(r'\d+'),"引言": quote.css('div.info div.bd p.quote span.inq::text').extract(),"电影链接": quote.css('div.info div.hd a::attr(href)').extract_first()}next_url = response.css('div.paginator span.next a::attr(href)').extract()if next_url:next_url = "https://movie.douban.com/top250" + next_url[0]print(next_url)yield scrapy.Request(next_url, headers=self.headler)

爬取结果展示:

第二部分代码:

# -*- coding:utf-8 -*-
import scrapyclass AuthorSpider(scrapy.Spider):name = 'douban2'start_urls = ['https://movie.douban.com/top250']headler = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 ''Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}def start_requests(self):for url in self.start_urls:yield scrapy.Request(url=url, callback=self.parse, headers=self.headler)def parse(self, response):# follow links to author pagesfor href in response.css('div.item div.info div.hd a::attr(href)').extract():yield scrapy.Request(href,headers=self.headler,callback=self.parse_author)# follow pagination linksnext_url = response.css('div.paginator span.next a::attr(href)').extract()if next_url:next_url = "https://movie.douban.com/top250" + next_url[0]print(next_url)yield scrapy.Request(next_url, headers=self.headler, callback=self.parse)def parse_author(self, response):# 通过yield对网页数据进行循环抓取yield {'排名' : response.css('.top250-no::text').extract(),'电影名': response.xpath('//span[contains(@property,"v:itemreviewed")]/text()').extract(),'导演': response.xpath('//div[contains(@id,"info")]/span[1]/span[contains(@class,"attrs")]/a/text()').extract(),'编剧': response.xpath('//div[contains(@id,"info")]/span[2]/span[contains(@class,"attrs")]/a/text()').extract(),'主演': response.xpath('//div[contains(@id,"info")]/span[3]/span[contains(@class,"attrs")]/a/text()').extract(),'语言': response.xpath('//div[contains(@id,"info")]/span[contains(@class,"pl")][3]/following::text()[1]').extract(),'上映日期': response.xpath('//div[contains(@id,"info")]/span[contains(@property,"v:initialReleaseDate")]/text()').extract(),'片长' : response.xpath('//div[contains(@id,"info")]/span[contains(@property,"v:runtime")]/text()').extract()}

爬取结果展示:


  • 此外为了便于在PyCharm上查看程序运行时的情况而不是在控制台,我们加了一个run.py,如下:
from scrapy import cmdline# name='douban_movie -o douban.csv'
# cmd = 'scrapy crawl {0}'.format(name)
# cmdline.execute(cmd.split())name='douban2 -o demo.csv'
cmd = 'scrapy crawl {0}'.format(name)
cmdline.execute(cmd.split())
  • 为了防止被ban,我们在前面代码中设置了请求头,除此之外,我还在settings.py中调整参数如下:
DOWNLOAD_DELAY = 1 # 下载的等待时间间隔一秒
# COOKIES_ENABLED = False 不向web server发送cookies
# ROBOTSTXT_OBEY = False 无视robot.txt
  • 当我在查看信息时发现第二个爬取结果并不是250行:

  • 于是查看程序返回信息,发现具体电影链接存在404:

  • 经过查证发现Top250确实确实有4部电影链接失效了,比如:《搏击俱乐部》、《熔炉》等


  • 为了便于数据分析,我们通过Pandas将两个CSV文件做merge操作

pd.merge(data_origin_1,data_origin_2,how='outer',on=u'排名')
  • 这样我们就完成了电影详细信息的爬取。

用Scrapy对豆瓣top250进行电影详细信息爬取相关推荐

  1. Python之财富自由——天天基金数据爬取并导入excel(详细信息爬取)

    一位泉州小哥近日喜提热搜"一万多买了1314只基金每只10块,买了好几天,第一次花钱花到手抽筋" 投资界有句名言,不要把鸡蛋全部放在一个篮子里,但你见过,有人装鸡蛋的篮子,比鸡蛋还 ...

  2. 基于scrapy+mongodb的智联招聘网站信息爬取

    本篇内容主要记录博主本人爬取智联招聘网站信息的过程!! 环境:python 3.6.5 pycharm JetBrains PyCharm Community Edition 2018.1 x64 M ...

  3. python爬豆瓣top250书籍_python爬虫练习-爬取豆瓣图书top250

    个人自学,完整学习请访问以下链接 学习链接:https://study.163.com/course/courseMain.htm?courseId=1004714034 代码 # -*-coding ...

  4. 电影资源详细信息爬取

    获取永久资源网电影分类下每页的URL from selenium import webdriverdef reseach_list():driver=webdriver.Chrome() #调用chr ...

  5. 哔哩哔哩分区视频详细信息爬取(三连、播放量、标签)等

    因为上手练习一个自己的数据分析项目,因此需要爬取数据.经历过两个版本的更新后,终于写出了第三版.期间也学会了selenium库的运用,API接口的调用,IP池等. 确定目标 因为想要一个量大的数据集, ...

  6. 基于R语言revest包的网络爬虫对豆瓣网TOP250的电影特征的抓取

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 本文我们会用R来爬取豆瓣网上2017年最热门电影的一些 ...

  7. 【爬虫】案例(爬取豆瓣top250)[完整+详细]

    文章目录 1.需求 2.流程 3.实现 导包 主函数 数据获取 数据解析 存储到excel 简易数据库 存储到数据库 5.完整代码 6.小注 1.需求 爬取豆瓣top250的电影的播放链接,封面链接, ...

  8. Python豆瓣电影评论的爬取及词云显示

    Python豆瓣电影评论的爬取及词云显示 课程设计论文链接 前言 开发工具.核心库 系统相关技术介绍 系统分析与设计 系统功能模块组成 实现功能和目标 爬取模块设计 爬取过程中下一页的处理 窗口界面设 ...

  9. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

最新文章

  1. python显示无效语法怎么处理-python – 无效语法(对于循环括号/括号)
  2. Linux中查看信息的命令
  3. Gitlab创建第一个项目
  4. K. Easy Sigma(类欧几里得)
  5. 【转】OneDrive开发入门
  6. C++ 关于“堆对象和栈对象”
  7. java 与 php 区别或异同(整理、整合)
  8. 获取HG526超级密码
  9. Resharper插件使用教程汇总
  10. nexus-3.0.0-03-win64搭建Maven nexus私服
  11. 龙芯pmon快速启动方法
  12. android录音工具,推荐四款十分好用的安卓录音应用
  13. 测试三星手机性能软件,一加三星小米华硕4部手机性能测试:一加手机6T仍是机皇...
  14. 双硬盘主机安装Ubuntu 18.04
  15. OpenGL ES 与原生窗口之间的接口——EGL
  16. 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
  17. java 图文验证码
  18. 江西理工大学校园网开机自动连接,断网自动重连
  19. 2018年年度总结-工作成长
  20. 第一章 计算机系统基础知识(1)

热门文章

  1. 电脑自动修复失败无限重启解决办法win10
  2. 5g 为什么需要边缘云_5g将云的力量带到了边缘
  3. OPPO的NPU马里亚纳芯片
  4. 需求挖掘:产品经理怎么基于项目做需求挖掘
  5. 基础1·约会网站推荐(k最近邻算法的实战)
  6. 知识是什么计算机如何表示知识,计算机基础知识教程介绍
  7. Java认识和开发环境搭建
  8. Autodesk MAYA (1):2012版-安装+破解
  9. 抖音开始封杀所有站外引流渠道!
  10. datax导入es7