Python爬虫(二十)_动态爬取影评信息
本案例介绍从JavaScript中采集加载的数据。更多内容请参考:Python学习指南
#-*- coding:utf-8 -*-
import requests
import re
import time
import json#数据下载器
class HtmlDownloader(object):def download(self, url, params=None):if url is None:return Noneuser_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0'headers = {'User-Agent':user_agent}if params is None:r = requests.get(url, headers = headers)else:r = requests.get(url, headers = headers, params = params)if r.status_code == 200:r.encoding = 'utf-8'return r.textreturn None#数据存储器
class HtmlParser(object):#从选购电影页面中解析出所有电影信息,组成一个listdef parser_url(self, page_url, response):pattern = re.compile(r'(http://movie.mtime.com/(\d+)/)')urls = pattern.findall(response)if urls != None:#将urls去重return list(set(urls))else:return None#解析正在上映的电影def __parser_release(self, page_url, value):'''解析已经上映的电影:param page_url:电影链接:param value: json数据:return'''try:isRelease = 1movieRating = value.get('value').get('movieRating')boxOffice = value.get('value').get('boxOffice')movieTitle = value.get('value').get('movieTitle')RPictureFinal = movieRating.get('RPictureFinal')RStoryFinal = movieRating.get('RStoryFinal')RDirectorFinal = movieRating.get('RDirectorFinal')ROtherFinal = movieRating.get('ROtherFinal')RatingFinal = movieRating.get('RatingFinal')MovieId = movieRating.get("MovieId")UserCount = movieRating.get("Usercount")AttitudeCount = movieRating.get("AttitudeCount")TotalBoxOffice = boxOffice.get("TotalBoxOffice")TotalBoxOfficeUnit = boxOffice.get("TotalBoxOfficeUnit")TodayBoxOffice = boxOffice.get("TodayBoxOffice")TodayBoxOfficeUnit = boxOffice.get("TodayBoxOfficeUnit")ShowDays = boxOffice.get('ShowDays')try:Rank = boxOffice.get('Rank')except Exception,e:Rank = 0#返回所提取的内容return (MovieId, movieTitle, RatingFinal, ROtherFinal, RPictureFinal, RDirectorFinal, RStoryFinal, UserCount, AttitudeCount, TotalBoxOffice+TotalBoxOfficeUnit, TodayBoxOffice+TodayBoxOfficeUnit, Rank, ShowDays, isRelease)except Exception, e:print e, page_url, valuereturn None#解析未上映的电影def __parser_no_release(self, page_url, value, isRelease=0):'''解析未上映的电影信息:param page_url:param value: return'''try:movieRating = value.get('value').get('movieRating')movieTitle = value.get('value').get('movieTitle')RPictureFinal = movieRating.get('RPictureFinal')RStoryFinal = movieRating.get('RStoryFinal')RDirectorFinal = movieRating.get('RDirectorFinal')ROtherFinal = movieRating.get('ROtherFinal')RatingFinal = movieRating.get('RatingFinal')MovieId = movieRating.get("MovieId")UserCount = movieRating.get("Usercount")AttitudeCount = movieRating.get("AttitudeCount")try:Rank = value.get('value').get('hotValue').get('Ranking')except Exception,e:Rank = 0#返回所提取的内容return (MovieId, movieTitle, RatingFinal, ROtherFinal, RPictureFinal, RDirectorFinal, RStoryFinal, UserCount, AttitudeCount, u'无', u'无', Rank, 0, isRelease)except Exception, e:print e, page_url, valuereturn None#解析电影中的json信息def parser_json(self, page_url, response):"""解析响应:param response:return"""#将"="和";"之间的内容提取出来pattern = re.compile(r'=(.*?);')result = pattern.findall(response)[0]if result != None:#json模块加载字符串value = json.loads(result)# print(result)try:isRelease = value.get('value').get('isRelease')except Exception, e:print ereturn Noneif isRelease:'''isRelease:0 很长时间都不会上映的电影;1 已经上映的电影; 2 即将上映的电影'''if value.get('value').get('hotValue') == None:#解析正在上映的电影# print(self.__parser_release(page_url, value))return self.__parser_release(page_url, value)else:#解析即将上映的电影# print(self.__parser_no_release(page_url, value, isRelease = 2))return self.__parser_no_release(page_url, value, isRelease = 2)else:#解析还有很长时间才能上映的电影return self.__parser_no_release(page_url, value)#数据存储器
#数据存储器将返回的数据插入mysql数据库中,主要包括建表,插入和关闭数据库等操作,表中设置了15个字段,用来存储电影信息,代码如下:
#这里以后补充class SpiderMain(object):def __init__(self):self.downloader = HtmlDownloader()self.parser = HtmlParser()def crawl(self, root_url):content = self.downloader.download(root_url)urls = self.parser.parser_url(root_url, content)#构造一个活的评分和票房链接for url in urls:try:t = time.strftime("%Y%m%d%H%M%S3282", time.localtime())param = {'Ajax_CallBack':'true','Ajax_CallBackType': 'Mtime.Library.Services','Ajax_CallBackMethod': 'GetMovieOverviewRating','Ajax_CallBackArgument0' : '%s'%(url[1]),'Ajax_RequestUrl' : '%s'%(url[0]),'Ajax_CrossDomain' : '1','t' : '%s'%t}rank_url = 'http://service.library.mtime.com/Movie.api?'rank_content = self.downloader.download(rank_url, param)data = self.parser.parser_json(rank_url, rank_content)self.output.output_end()except Exception, e:print("Crawl failed")if __name__ == '__main__':spier = SpiderMain()spier.crawl('http://theater.mtime.com/China_Jiangsu_Province_Nanjing/')
最后
分享一份Python的学习资料,但由于篇幅有限,完整文档可以扫码免费领取!!!
1)Python所有方向的学习路线(新版)
总结的Python爬虫和数据分析等各个方向应该学习的技术栈。
比如说爬虫这一块,很多人以为学了xpath和PyQuery等几个解析库之后就精通的python爬虫,其实路还有很长,比如说移动端爬虫和JS逆向等等。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然达不到大佬的程度,但是精通python是没有问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
。
相关文章:
Python爬虫(二十)_动态爬取影评信息
本案例介绍从JavaScript中采集加载的数据。更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import time import json#数据下载器 class HtmlDownloader(object):def download(self, url, paramsNone):if url is None:return Noneuser_agent …...
基于 Flink CDC 高效构建入湖通道
本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人, Apache Flink PMC Member & Committer 徐榜江(雪尽),在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分: Flink CDC 核心技术解析数…...
redis的基础底层篇 zset的详解
一 zset的作用以及结构 1.1 zset作用 redis的zset是一个有序的集合,和普通集合set非常相似,是一个没有重复元素的字符串集合。常用作排行榜等功能,以用户 id 为 value,关注时间或者分数作为 score 进行排序。 1.2 zset的底层结…...
数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...
全文链接:http://tecdat.cn/?p27384 在本文中,数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息(点击文末“阅读原文”获取完整代码数据)。 介绍 该数据集(查看文末了解数据获取方式)有1599个观测值和12个变量…...
Open3D(C++) 点云旋转的轴角表示法和罗德里格斯公式
目录 一、算法原理1、轴角表示法2、罗德里格斯公式二、代码实现三、结果展示四、相关链接一、算法原理 1、轴角表示法 假设刚体坐标系为B(Oxyz)绕单位向量 ω ⃗ \vec{ω}...
CPU的三级缓存
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多&#…...
pgzrun 拼图游戏制作过程详解(6,7)
6. 检查拼图完成 初始化标记成功的变量Is_Win Is_WinFalse 当鼠标点击小拼图时,判断所有小拼图是否都在正确的位置,并更新Is_Win。 def on_mouse_down(pos,button): # 当鼠标被点击时# 略is_win Truefor i in range(6):for j in range(4):Square S…...
laravel框架 - 集合篇
Laravel Eloquent 通常返回一个集合作为结果,集合包含很多有用的、功能强大的方法。 你可以很方便的对集合进行过滤、修改等操作。 本次教程就一起来看一看集合的常用方法及功能。 你可以使用助手函数 collect 将数组转化为集合。 $data collect([1, 2, 3]); 1…...
[npm]package.json文件
[npm]package.json文件 生成 package.jsonpackage.json 必须属性nameversion 描述信息descriptionkeywordsauthorcontributorshomepagerepositorybugs 依赖配置dependenciesdevDependenciespeerDependenciesoptionalDependenciesbundledDependenciesengines 脚本配置scriptscon…...
联表查询 索引 事务 JDBC使用 CPU工作原理 线程概念 Thread类的用法
第 1 题(单选题) 题目名称: 已知表T1中有2行数据,T2中有3行数据,执行SQL语句,“select a.* from T1 a,T2 b”后,返回的行数为 题目内容: A .2 B .3 C .5 D .6 第 2 题(单选题…...
学习格式化dedecms模版里格式化时间标签pubdate的方法
学习格式化dedecms模版里格式化时间标签pubdate的方法 [field:pubdate function"GetDateTimeMK(me)"/][field:pubdate function"GetDateMK(me)"/][field:pubdate function"MyDate(Y-m-d H:i,me)"/]显示不同的时间样式: GetDateTimeMK…...
用思维导图了解《骆驼祥子》的内容
《骆驼祥子》是一部经典的中国小说,由著名作家老舍所创作。小说以北京城下贫苦的人们为背景,讲述了一个叫做祥子的年轻人,为了摆脱贫困和苦难,不断地奋斗和努力的故事。下面我们进行文字思维导图的方式来一起了解一下整个故事的内…...
js 不同域iframe 与父页面消息通信
不同域iframe 与父页面消息通信 💡访问 iframe 页面中的方法💡跨文本消息监听消息发送消息 var iframe document.getElementById("myIframe"); var iframeWindow iframe.contentWindow;💡访问 iframe 页面中的方法 iframeWindow…...
c++ vs2019 cpp20规范 模板function 源码解析
以下是文字结论: 这个函数模板,可以把函数类型,和对象函数类型(就是类里定义了operator()运算符函数)统一成一个类型,反正都是可调用对象。 代码注释完有900行,也挺多的。选择最重要的结论贴出…...
点云从入门到精通技术详解100篇-从全局到局部的三维点云细节差异分析(下)
目录 5.2.3多层级点云细节差异对比 5.3从全局到局部的细节差异分析流程与结果 实验结果与分析...
微信小程序中 vant weapp 使用外部的icon作为图标的步骤
微信小程序中 vant weapp 使用外部的icon作为图标的步骤 1. 在项目中创建静态资源文件夹2. 前往iconfont图标官网,添加图标并拷贝在线链接3. 下载iconfont代码,解压之后拷贝到小程序的目录中4. 修改iconfont.wxss 将本地链接替换为在线链接5. 在项目的ap…...
[npm]脚手架本地全局安装1
[npm]脚手架本地全局安装1 npm link 全局安装npm install 全局安装卸载全局安装的脚手架 该文章是你的脚手架已经开发完成的前提下,你想要本地全局安装该脚手架,便于本地使用脚手架的命令的情况 npm link 全局安装 如果本地开发的项目是个脚手架&#…...
2023学习计划
1.把vue3学习完,照着视频把示例都走一遍 2.完整地学习完springboot 3.刷题,写算法题。每天2道左右 4.看书《数据结构与算法之美》《高性能SQL》 5.复习JavaSE,把基础知识再过一遍 6.学习Redis,看视频,走示例 7.M…...
网络编程(一):服务器模型、Java I/O模型、Reactor事件处理模型、I/O复用
文章目录 一、Socket和TCP/IP协议族的关系二、服务器模型1.C/S模型(Client/Server Model)2.P2P模型(Peer-to-Peer Model) 三、Java的I/O演进1.BIO(阻塞)(1)工作流程(2&am…...
flyway适配高斯数据库
文章目录 flyway适配高斯数据库 flyway适配高斯数据库 flyway-core 源码版本:6.2.2 tag 由于高斯和postgresql使用的驱动都是一样的,所以基于flyway支持已有的postgresql数据库来改造 修改点如下: 1、PostgreSQLConnection 类中的 doRest…...
LVS keepalived实现高可用负载群集
目录 1 Keepalived及其工作原理 1.1 Keepalived体系主要模块及其作用: 2 LVSKeepalived 高可用群集部署 2.1 配置负载调度器(主、备相同) 2.1.1 配置keeplived(主、备DR 服务器上都要设置) 2.1.2 启动 ipvsadm 服…...
HTTP RESTFul RPC
一、简介 (1)HTTP(Hypertext Transfer Protocol)是一种应用层协议。它经常用于在Web和服务器之间通讯,或服务与服务之间通讯。 (2)RESTFul 约束HTTP协议实现上的规范设计。 (3&am…...
短视频seo矩阵系统源码开发搭建--代用户发布视频能力
短视频SEO矩阵系统源码开发搭建的代用户发布视频能力,主要是指在系统平台上,允许用户将其创作的内容发布到指定的账号或平台,并设置好相关的标题、话题、锚点等信息。 一、搭建步骤及注意事项 确定使用场景。根据业务需求,确定该…...
真实的产品开发中,后端的设计规约可以写哪些
真实的产品开发中,后端的设计规约可以写哪些 产品开发的后端设计规约通常包括以下内容: 数据模型设计:详细描述数据库的结构,包括数据表的设计、字段的定义和关系的设置等。 业务逻辑设计:详细描述后端的业务逻辑&a…...
Pytorch 多卡并行(2)—— 使用 torchrun 进行容错处理
前文 Pytorch 多卡并行(1)—— 原理简介和 DDP 并行实践 介绍了使用 Pytorch 的 DDP 库进行单机多卡训练的方法,本文进一步说明如何用 torchrun 改写前文代码,以提高模型训练的效率和容错性torchrun 是从 Pytorch 1.9.0 开始引入的…...
Java异常处理(详解)
Java异常处理 前言一、异常与异常类1.异常的概念2.异常类Error类Exception类(1)非检查异常(2)检查异常 二、异常处理1.异常的抛出与捕获2.try-catch-finally语句3.声明方法抛出异常3.用throw 语句抛出异常 三、自定义异常类 前言 …...
嵌入式-数据进制之间的转换
目录 一.简介 1.1十进制 1.2二进制 1.3八进制 1.4十六进制 二.进制转换 2.1二进制-十进制转换 2.2八进制-十进制转换 2.3十六进制-十进制转换 2.4十进制-二进制转换 2.5十进制-八进制转换 2.6十进制-十六进制转换 2.7小数部分转换 一.简介 被传入到计算机的数据要…...
腾讯mini项目-【指标监控服务重构】2023-08-20
今日已办 PPT制作 答辩流程 概述:对项目背景、架构进行介绍(体现我们分组的区别和需求)人员:小组成员进行简短的自我介绍和在项目中的定位,分工进展:对项目进展介绍,其中a、b两组的区别和工作…...
智能文本纠错API的应用与工作原理解析
引言 在数字时代,文本撰写和传播变得日益重要,无论是在学校里写论文、在职场中发送邮件,还是在社交媒体上发表观点。然而,文字错误、标点符号错误、语法问题和不当的表达常常会削弱文本的质量,降低信息传达的效果。为…...
在springboot下将mybatis升级为mybatis-plus
在springboot下将mybatis升级为mybatis-plus 1. 整体描述2. 具体步骤2.1 更新pom引用2.2 更新yml配置2.3 更新config配置2.4 BaseEntity修改 3. 程序启动4. 总结 1. 整体描述 之前项目工程用的是mybatis,现在需要将其替换为mybatis-plus,mybatis-plus的…...
长沙百度做网站多少钱/推广软件赚钱的平台
手机上有好用的时钟APP,时钟软件哪个好用? 每个人的手机屏幕都有着自己独特的设计,而时钟软件能够为用户的手机再增添一些风采和魅力,更有专为来年人设计的大字体桌面时钟,更加的清晰直观,各种特色的桌面时钟app中都有…...
网站建设 面试问题/seo搜索引擎优化工资多少钱
sso-shiro-casspring下使用shirocas配置单点登录,多个系统之间的访问,每次只需要登录一次,项目源码系统模块说明cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已doc: 文档目录,里面有…...
网站超链接怎么做 word文档/百度推广代理公司哪家好
1 介绍 1.1 实现流程 让左边排好序让右边排好序合并后整体排好序 1.2 特点 时间复杂度O(nlogn)空间复杂度O(n)稳定 2 实现 2.1 递归 public class MergeSort {public static void mergeSort(int[] arr) {if (arr null || arr.length < 2) {return;}process(arr, 0,…...
真人性做爰官方网站/成都seo培训
介绍 本文介绍,在Eclipse插件开发过程中,经常会遇到的有关菜单路径和工具栏路径的使用问题。最常见到的可能就是additions了,那除了这个还有些什么呢,请看下文。 菜单 工具栏 查看原文:http://surenpi.com/2015/08/2…...
成都网站优化维护/怎么被百度收录
max_children40 , 每个children平均占用20M-30M内存,children越多,可以同时接受的并发数量越多,一般children的值是网站最高并发数浮动值,这值再内存占用,就是你需要用到的内存。max_requests N 是指当每个children接…...
wordpress远程ftp/企业营销策划有限公司
前几天做项目的时候,需要实现一个动态锚点的效果 如果是传统项目,这个效果就非常简单。但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 animate() 方法的情况下,如何实现平滑滚动? 2. 如何监听页面滚…...