题目:从http://movie.mtime.com中读取一个电影的票房信息和相关的同类电影。

方案一:采用Ajax技术,逐步提取动态网站的json,再进行爬虫

知识点:

1.由于该数据是动态信息,需要找到相关的json,并拼接出所需要的网址,进行爬虫。

2.利用正则表达式提取网址信息、利用json将字符串字典化。

from bs4 import BeautifulSoup
import re, csv, urllib.request, urllib.parse, time, json, pickleclass url_manager(object):def __init__(self):self.new_urls = []  # 书籍上采用set()函数,主要是考虑到次函数的去重功能,但集合是无序的,导致不方便查找new_urls内的数据,且后序add(url)时已进行判定,不必要再使用set()self.old_urls = []def add_new_url(self, url):if url not in self.new_urls and url not in self.old_urls:self.new_urls.append(url)def add_new_urls(self, urls):if urls == None:returnfor url in urls:self.add_new_url(url)def have_new_url(self):return len(self.new_urls) != 0def get_new_url(self):data = self.new_urls.pop(0)  # 从第一个数据进行删除,逐一爬虫
self.old_urls.append(data)return dataclass url_download(object):def download(self, url):response = urllib.request.urlopen(url)data = response.read().decode()if data == None:print("no web")return Falsereturn dataclass url_scrapy(object):def get_data(self, source_url, source_data):#书中将票房的电影由于其json中关键字的差异,进行了分类,本程序中为了简单起见,只是读取一下关键字。
pattern = re.compile(r'=(.*?);')jsondata = pattern.findall(str(source_data))[0]jsondata2=json.loads(jsondata)movieresult={'MovienIDame': jsondata2['value']['movieRating']['MovieId'],'RatingFinal': jsondata2['value']['movieRating']['RatingFinal'],'movieTitle': jsondata2['value']['movieTitle'] }print(movieresult)return (source_url,movieresult)  # 没有搜索到url时,返回Nonedef get_sameurldata(self, source_url, source_data):a=[]pattern = re.compile(r'=(.*?);')jsonurl = pattern.findall(str(source_data))[0]jsonurl1=json.loads(jsonurl)movielist=jsonurl1['value']['movieList']for i in movielist:a.append(i['url'])return (a)  # 没有搜索到url时,返回Noneclass output_url(object):def output_scroe(self, root_url):  # 组建动态网址time0 = time.strftime("%Y%m%d%H%M%S11111", time.localtime())a = re.compile(r'/(\d+)/')urlnum = a.findall(root_url)url2 = "http%3A%2F%2Fmovie.mtime.com%2F" + urlnum[0] + '%2F'scroe_url = 'http://service.library.mtime.com/Movie.api?' \'Ajax_CallBack=true' \'&Ajax_CallBackType=Mtime.Library.Services' \'&Ajax_CallBackMethod=GetMovieOverviewRating' \'&Ajax_CrossDomain=1' \'&Ajax_RequestUrl=%s' \'&t=%s' \'&Ajax_CallBackArgument0=%s' % (url2, time0, urlnum[0])return scroe_urldef output_sameurl(self, root_url):  # 组建动态网址
time0 = time.strftime("%Y%m%d%H%M%S11111", time.localtime())a = re.compile(r'/(\d+)/')urlnum = a.findall(root_url)url2 = "http%3A%2F%2Fmovie.mtime.com%2F" + urlnum[0] + '%2F'same_url = 'http://service.library.mtime.com/Movie.api?' \'Ajax_CallBack=true' \'&Ajax_CallBackType=Mtime.Library.Services' \'&Ajax_CallBackMethod=GetSimilarRecommenMovieInfoByMovieId' \'&Ajax_CrossDomain=1' \'&Ajax_RequestUrl=%s' \'&t=%s' \'&Ajax_CallBackArgument0=%s' % (url2, time0, urlnum[0])return same_urlclass output_data(object):def data_save(self, data):with open('pachong.csv', "a+", encoding='utf-8') as f:f1 = csv.writer(f, lineterminator='\n')f1.writerows(data)class controllers(object):def __init__(self):self.manager = url_manager()self.download = url_download()self.scrapy = url_scrapy()self.output = output_data()self.scoreurl = output_url()def control(self, url):self.manager.add_new_url(url)num = 1data1 = 0while (1):if num > 200:breakelif self.manager.have_new_url():url_down = self.manager.get_new_url()score_url = self.scoreurl.output_scroe(url_down)same_url = self.scoreurl.output_sameurl(url_down)info = self.download.download(score_url)url_info=self.download.download(same_url)data1, url1 = self.scrapy.get_data(url_down, info)same_url1= self.scrapy.get_sameurldata(url_down, url_info)if data1 != None:self.output.data_save(data1)print(num, "is finished:", url_down)num += 1self.manager.add_new_urls(same_url1)else:print('has no url')breakif __name__ == "__main__":url = r'http://movie.mtime.com/225824/'a = controllers()a.control(url)

方案二:采用selenium技术进行加载动态网站信息,直接获取数据

转载于:https://www.cnblogs.com/xuehaiwuya0000/p/10622924.html

python每日一题:爬虫电影的动态票房信息相关推荐

  1. linux scrapy 定时任务_写爬虫一定要会scrapy?-Python每日3题(爬虫专题)

    这里是Python7编程挑战-爬虫专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道 ...

  2. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  3. Python 每日一题(一元二次方程求解)

    Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 输入一个一元二次方程的系数 a, b, c,求解方程的根. 分析:  1.一元二次方程标准形式: (a ≠ ...

  4. Python 每日一题(猴子吃桃问题)

    Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 一个猴子第一天摘下若干个桃子,当即吃了1半,还不过瘾,又多吃了1个.第二天早上吃了剩下桃子的1半,以后每天 ...

  5. python每日一题今天的答案_python每日一题总结1

    每日一题1 1. 写出python中import 导入库的几种常见写法 举例:import math from math imourt sqrt 每日一题2 1. print 1000L  的结果 答 ...

  6. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第5天!一起来呀,就7天!每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道 ...

  7. 旧瓶装新酒系列-Python每日多题(一)

    项目结束,终于有时间静下心来好好学习Python了.对于Python,我还是新手,只大概看过一遍<A byte of Python>.准备直接做些小的练习,题目就照搬Java的和C的经典课 ...

  8. python每日一题公众号_python每日一题总结4

    20180609 qzd 每日一题14 输入三个整数x,y,z,请把这三个数由小到大输出. my code x=int(input('x:')) y=int(input('y:')) z=int(in ...

  9. 少儿Python每日一题(8):最大公约数和最小公倍数

    求两个数的最大公约数和最小公倍数是非常经典的题型.无论是等级考试还是竞赛题中都会出现.此类题目同时多次出现在蓝桥杯.NOC的比赛中以及电子学会.NCT的Python考级原题中,它们的区别仅仅在于是否对 ...

最新文章

  1. iOS无法导入头文件
  2. 对javascript作用域链的理解
  3. java8怎么按照两个字段的乘积排序_django-orm F对象的使用 按照两个字段的和,乘积排序实例...
  4. python编程胡牌将是什么意思_python麻将和牌算法
  5. 供应商禁止供货后,这个城市行动了:社区团购不得低价倾销、排挤对手
  6. 蓝桥杯 ADV-126 算法提高 扫雷
  7. 经典回顾——2012年度最佳网页设计作品出炉【下篇】
  8. dos命令集--江南技术联盟
  9. 商城小程序项目完整源码(微信小程序)
  10. 免费获取小红伞互联网安全套装2012-90天的小红伞2012激活码激活密钥小红伞
  11. Android学习笔记之百度地图基础知识
  12. Java StackTraceElement源码总结 StackTraceElement源码注释翻译和解析中英文对照版
  13. velodyne16驱动调试记录
  14. html图片高度撑开,CSS背景图撑开盒子高度
  15. oracle insert汉字出错,oracle insert中文后,select是乱码
  16. 红米4a android 9 速度,小米-红米4A/5A-通刷-LOS-Beta5.0-安卓9.0.0-来去电归属-农历等-本地化增强适配...
  17. 红米4a android p,一图彻底看懂红米4/红米4A
  18. ssh登录极路由后台_各品牌路由器登录网址大全 路由器默认用户名/密码
  19. win10安装SQL Server 2017 遇到的一大堆问题(+SSMS)【最后用虚拟机解决】
  20. 提高ubuntu下访问github的速度

热门文章

  1. 计算机技术与软件专业技术资格(水平)考试—— 软考中级 网络工程师笔记five
  2. 【回溯算法】旅行商问题--TSP问题
  3. (以Windows 7 引导的)Windows 和Ubuntu双系统安装
  4. 中国抓到了勒索病毒作者!!
  5. Spring 源码分析(一) —— 迈向Spring之路(转载)
  6. BBP算法计算圆周率(BBP Formula HDU - 6217)
  7. 识别检测类系统(基于pytorch)(一)
  8. 如何在工作之余找精力做副项目?
  9. 投影机拼接融合技术--介绍
  10. 8.1 子模块分析之IDMAC