准备流程

  1. 确认网页是否为动态数据
    右键查看网页源代码中搜你要的数据中的关键词,若搜不出来,就说明是动态数据
  2. 只要是动态数据,直接去抓包
    控制台Network ->xhr -> 点击左下角各个数据包 ->preview,找到你想要的数据所在的那些数据包后 -> Headers -> general ->request-URL:找到后端返给前端的api
    电影总数的request-URL为:https://movie.douban.com/j/chart/top_list_count?type=13&interval_id=100%3A90
  3. 分析headers中查询参数query string params的规律
    比对各个数据包的查询字符串的不同点,看哪些参数是变化的:
    type: 13
    interval_id: 100:90
    action:
    start: 0
    limit: 20
    type: 13
    interval_id: 100:90
    发现start和type是变化的,start表示第几页,从0开始以20递增,type表示电影类型(爱情等),与类型的关系可从首页的html节点中抓取出来
  4. 在地址栏中请求我们抓到的后端传给前端的api包,查看json数据的具体格式
    后端返回给前端的api,返回的是json串,发现此处数据格式为:’[{},{},{}]’

思路

要实现抓取所有电影分类的数据,需要知道每个分类下电影部数的总数,发现这个数据在电影类别页面下也有,而且也是动态数据,也需要抓包获取

详细代码

import requests
import time
import random
from fake_useragent import UserAgent
import json
import re class DoubanSpider:   def __init__(self): #各分类排行的电影数据json包的apiself.url = 'https://movie.douban.com/j/chart/top_list?type={}&interval_id=100%3A90&action=&start={}&limit=20' #各分类排行电影的电影总数Json包apiself.url_1 = 'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90' #1. 发请求获取响应的方法def get_html(self,url): headers = {'User-Agent':UserAgent().random} html = requests.get(url=url,headers=headers).text return html #2. 解析提取电影数据(动态)的方法 #动态数据的提取不使用re和xpath,而是分析json包(因为前端使用ajax向后端要数据,后端返给前端的数据是json串) def parse_html(self,url): #拿到的响应内容是Json格式的字符串:'[{},{},{}]' html = self.get_html(url) #从Json串中取出你想要的数据:电影名,得分,年代,并存放到字典中 #将json串转换成python的数据类型:[{title:xxx},{score:xxx},{}] html = self.get_html(url)#将json格式的字符串转为Python数据类型html = json.loads(html) item = {} #对字典进行遍历赋值,每次遍历赋值都会覆盖修改之前的数据打印出来查看for film in html: item['name'] = film['title'] item['score'] =film['score'] item['time'] = film['release_date'] print(item) #为了拼接url,需要电影类型码这个变量,该方法用于获取电影类型码,发现是数据在静态页面中,使用re解析def get_types_dict(self): #类型码数据所在网页url = 'https://movie.douban.com/chart' #请求改页面获取响应html = self.get_html(url) #在页面源代码中找type值和电影类型,使用re解析(方便),源码中的标签如下:  #<span><a href="/typerank?type_name=剧情&type=11&interval_id=100:90&action=">剧情</a></span>   #写正则,返回的数据格式为:[('type_name','type'),('剧情','11'),(),....]   #<span><a href="/typerank.*?type_name=(.*?)&type=(.*?)&interval_id=100:90&action=">.*?</span>   p = re.compile('<span><a href="/typerank.*?type_name=(.*?)&type=(.*?)&interval_id=100:90&action=">.*?</span>',re.S)   r_list = p.findall(html)#将拿到的数据格式:[(),(),...]做成字典types_dict = {}for r in r_list:types_dict[r[0]] = r[1]return types_dict#2. 请求并解析提取各分类排行电影总部数的方法def get_total(self,type):#请求json包并获取响应html = self.get_html(self.url_1.format(type))#将json串:{key1:value1,....} 转为python数据类型:字典html = json.loads(html)#提取电影总量数据total = html['total']return total#启动函数:需要给出请求的urldef run(self):#获取电影类型对应类型码的数据,数据格式为字典:{类型1:类型码1,类型2:类型2,。。。。}types_dict = self.get_types_dict()#将所有电影类型输出出来供选择menu ={}for key in types_dict:menu = menu + key + ' | 'print(menu)type = input('请输入用户类型:')#获取用户输入类型的type码type = types_dict[type]total = self.get_total(type)for start in range(0,total,20): #第二个参数是想要遍历的总电影数#拼接电影数据的json包的urlurl = self.url.format(type,start)self.parse_html(url)time.sleep(random.uniform(0,1))if __name__ == '__main__':spider = DoubanSpider()spider.run()

python爬虫 抓取豆瓣电影 电影分类排行榜的所有数据相关推荐

  1. 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法

    这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...

  2. 【Python_006】Python爬虫抓取豆瓣电影影评

    写在前面: 我在上一篇博客中[Python_005]利用jieba及wordcloud生成词频及词云图 ,为了测试切词和词云图的效果,从豆瓣爬了电影的100条短评,本篇博客就来分享一下如何爬豆瓣影评 ...

  3. python爬虫爬取豆瓣top250电影影评

    信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...

  4. python爬虫——爬取豆瓣TOP250电影

    相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价.豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看. 爬取目标 本文将爬取豆瓣 ...

  5. python爬虫——爬取豆瓣热门电影海报生成html文件

    环境 webbrowser urllib requests v2.21.0 实现功能 过程 1.查看豆瓣热门电影模块源码: 看到其所在class为list-wp,我们想通过urllib里面的reque ...

  6. python爬虫--爬取豆瓣top250电影名

    关于模拟浏览器登录的header,可以在相应网站按F12调取出编辑器,点击netwook,如下: 以便于不会被网站反爬虫拒绝. 1 import requests 2 from bs4 import ...

  7. Python 爬虫 抓取豆瓣读书TOP250

    # -*- coding:utf-8 -*- # author: yukun import requests from bs4 import BeautifulSoup# 发出请求获得HTML源码的函 ...

  8. 003.[python学习] 简单抓取豆瓣网电影信息程序

    003.[python学习] 简单抓取豆瓣网电影信息程序 声明:本程序仅用于学习爬网页数据,不可用于其它用途. 本程序仍有很多不足之处,请读者不吝赐教. 依赖:本程序依赖BeautifulSoup4和 ...

  9. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  10. python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中

    我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...

最新文章

  1. JDK / JRE zip
  2. **CI中使用IN查询(where_in)
  3. 守护进程实现时间服务器
  4. info nano shutdown
  5. [教程]centos卸载、安装mysql(源码编译安装方式)
  6. docker部署aliyundrive-webdav实现阿里云盘WebDAV服务
  7. 基于HTML+CSS+JavaScript仿华为手机电子商城
  8. html常用标签和属性
  9. 万用表判断喇叭单元正负极
  10. 期末了,用Python写个自动批改作业系统
  11. 如何备份Linux系统磁盘
  12. android 内部存储 共享,android存储:共享参数、内部存储、拓展存储
  13. DirectX 3D编程及其最简单例子
  14. 为什么https比http更安全?_货车司机拉钢卷时为什么不平放?平放不是更安全吗?...
  15. FFmpeg下载和编译
  16. java设置标签艺术字体颜色_Java 在Word文档中添加艺术字
  17. 心理测评软件php mysql_中学心理测评软件
  18. Android图片海报制作软件开发实践
  19. 计算机论文写法,计算机专业论文写作方法.ppt
  20. dnf手游内测服务器维护,dnf手游:体验服更新开服再次迎来希望?内测充值玩家等待退款...

热门文章

  1. seo站内优化的10点建议及分析处理方案
  2. python登陆百度网盘并读取自己的所有文件,输出到文本文件中
  3. android 开发笔记 (黎活明)
  4. php怎么做地图源代码,php直播源码百度地图坐标拾取系统自定义页面
  5. Apache Ranger安全区介绍
  6. 复权、前复权和后复权
  7. 大学英语综合教程四 Unit 1 课文内容英译中 中英翻译
  8. ADIDAS的完整形式是什么?
  9. 采用RP2040 MCU的树莓派Pico迷你开发板介绍
  10. 公网与私网地址转换——NAT技术的使用小技巧,超简单!!!