本案例介绍从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 None

user_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.text

return None

#数据存储器

class HtmlParser(object):

#从选购电影页面中解析出所有电影信息,组成一个list

def 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 = 1

movieRating = 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, value

return 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, value

return 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 e

return None

if 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爬虫---实现项目(一) Requests爬取HTML信息

上面的博客把基本的HTML解析库已经说完了,这次我们来给予几个实战的项目. 这次主要用Requests库+正则表达式来解析HTML. 项目一:爬取猫眼电影TOP100信息 代码地址:https://g ...

Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息

目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...

Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

Python之爬虫(二十) Scrapy爬取所有知乎用户信息(上)

爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...

Python 爬虫实例(8)—— 爬取 动态页面

今天使用python 和selenium爬取动态数据,主要是通过不停的更新页面,实现数据的爬取,要爬取的数据如下图 源代码: #-*-coding:utf-8-*- import time from ...

小白学 Python 爬虫(25):爬取股票信息

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

Python爬虫教程:验证码的爬取和识别详解

今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻 ...

Python爬虫学习(6): 爬取MM图片

为了有趣我们今天就主要去爬取以下MM的图片,并将其按名保存在本地.要爬取的网站为: 大秀台模特网 1. 分析网站 进入官网后我们发现有很多分类: 而我们要爬取的模特中的女模内容,点进入之后其网址为:h ...

Python爬虫学习之使用beautifulsoup爬取招聘网站信息

菜鸟一只,也是在尝试并学习和摸索爬虫相关知识. 1.首先分析要爬取页面结构.可以看到一列搜索的结果,现在需要得到每一个链接,然后才能爬取对应页面. 关键代码思路如下: html = getHtml(& ...

随机推荐

持久化存储——偏好设置,plist,归档---学习笔记二

//一. 本地持久化 //1.沙盒 //1.1 应用程序包:存放的是应用程序的源文件,包括资源文件和可执行文件 NSString *path = [[NSBundle mainBundle]bundl ...

【Java】XML解析之DOM

DOM介绍 DOM(Document Object Model)解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内 ...

iOS遍历程序内某个文件夹下所有文件的属性

项目中有个文件管理系统,在做本地文件管理操作的时候,遇到了遍历本地文件的问题 遍历到的文件有些不需要显示,而且需要得到文件的相关属性,在此总结下. //查找需要遍历文件夹的目录 NSString *k ...

python: hashlib 加密模块

加密模块hashlib import hashlib m=hashlib.md5() m.update(b'hello') print(m.hexdigest()) #十六进制加密 m.update( ...

【ContestHunter】【弱省胡策】【Round3】(C)

容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...

使用Oracle的存储过程批量插入数据

python爬虫影评_Python爬虫(二十)_动态爬取影评信息相关推荐

  1. Python爬虫新手入门教学(二十):爬取A站m3u8视频格式视频

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文内容 Python爬虫新手入门教学(一):爬取豆瓣电影排行信息 Python爬虫新手入门 ...

  2. Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  3. 【记录爬虫实战过程】入门学习·详细过程·爬取天气信息并通过pyecharts进行可视化展示1

    文章目录 前言 正文 1.导入对应模块 2.确定爬取的网站 3.得到数据 4.数据处理 5.将所得数据写入CSV 完整代码 补充:数据可视化 前言 入门学习这个部分是跟着b站教学视频做的,记录了所有过 ...

  4. python爬虫(二十四)爬取汽车之家某品牌图片

    爬取汽车之家某品牌图片 需求 爬取汽车之家某品牌的汽车图片 目标url https://car.autohome.com.cn/photolist/series/52880/6957393.html# ...

  5. 爬虫学习笔记(二)——使用 requests 爬取百度图片

    一.抓取首页图片 静态页面 流程: 1.1.找到目标数据 这里用狗的图片来举例,接下来我们就要分析然后爬取这个页面所有狗的图片的规律 1.2.分析请求流程 先访问page页获取网页的源代码 # 网页的 ...

  6. python画哪吒_Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评

    前面爬完网站信息图片之后,今天的又有了个小目标,最近的电影哪吒很火,去豆瓣上看了一下 影评,决定了今天主要是实现Python第三个项目:爬取豆瓣<哪吒之魔童降世> 短评,然后下载在exce ...

  7. python多进程内存共享_python 归纳 (二十)_多进程数据共享和同步_共享内存Value Array...

    # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一个做加法,各做1 ...

  8. 二十六、爬取拉钩网Python职位的数据

    @Author:Runsen 受疫情影响,很多小伙伴都主动或者被动的需要重新找工作,都说今年的就业形势不好,特别是对传统行业的冲击特别大.想知道最近python的市场如何,爬一波拉钩看下究竟. 先将数 ...

  9. 二十五、爬取毛豆新车的数据

    最近发现有篇公众号爬虫文章没有更新到CSDN爬虫篇|爬虫实战(十),一般都是CSDN没有更新到公众号中. 前言: 对于爬虫还有一点小知识:fake_useragent的使用 fake_useragen ...

最新文章

  1. windows cmd color颜色设置
  2. python 循环中报错 继续运行_python中列表删除和多重循环退出
  3. MATLAB浮点数与十六进制(浮点数)转换
  4. 如何从机器学习数据中获取更多收益 1
  5. PageHelper概述与基本使用步骤介绍
  6. cmake学习(一)静态库与动态库构建
  7. python笨办法_笨办法学Python(十)
  8. ffmpeg转码_音视频处理神器FFmpeg
  9. python变量详解_python基础教程-03-变量详解
  10. 安卓应用安全指南 5.2.2 权限和保护级别 规则书
  11. No Thumbnails for Custom Picture Library Definition
  12. php兄弟连全集教程,PHP视频教程全集下载 – LAMP兄弟连原创光盘高清WMV格式
  13. readelf命令使用
  14. r5驱动 索尼exmor_为画质插上翅膀 详解索尼Exmor R CMOS
  15. Unity 自定义扩展Hierachy右键菜单
  16. HDFS的StartupProgress启动跟踪分析
  17. uni-app实战之社区交友APP(16)模块封装、文章和话题功能实现
  18. 面向对象程序设计实验——编写Rational类
  19. Mac OS 如何升级到指定版本
  20. 工业品微营销时代_做网络营销_原创有价值的文章更容易带来流量 上海添力

热门文章

  1. 饿了么商家开放平台踩坑记录2,php更新商品信息提示attribute:[]不是一个有效的JSON对象 By勤勤学长 Qq318692996
  2. 修改jsp代码之后浏览器报500错误问题以及解决方法
  3. Scheme:点对(dotted pair,或pair)
  4. 麋鹿分布图制作(二)—— 用Python和R在地图上打点
  5. 【Java】JavaMail发送QQ邮件邮件
  6. HDFS遍历子目录 Hadoop fs -ls -R path
  7. 【蓝桥杯】2019年第十届蓝桥杯(个人赛) 大赛介绍、注意事项及赛后总结
  8. 纯音乐 -《抒情中国系列-烟雨江南》
  9. js打印html表格内容,js实现简单的打印表格
  10. mysql中没有utf8字符集_mysql之坑–UTF8字符集