题记

本文旨在记录爬取猫眼电影国内票房榜单的过程,以及对脚本内字体文件反爬函数的说明。

环境

系统: Windows 10
Python版本: Python 3.7
爬取时间: 2019.3.19

难点说明

爬取猫眼电影的过程中,发现在票房数据出现了乱码,经百度搜索相关信息,阅读多篇文章,才知道爬虫的博大精深。

  1. 下载一个基本字体路径,找到它对应的数字及其编码
  2. 每一次爬取网页时,都要先下载该网页的字体文件,然后与基本字体文件作对比,获得爬取网页的数字对应编码。

本次主要参考了: Python爬虫杂记 - 字体文件反爬(二)

代码说明

from fontTools.ttLib import TTFontdef get_maoyan_dict(self, url):# url: 字体文件下载链接# # 首先下载新的字体文件font_woff = requests.get(url, stream=True)with open('maoyan.woff', 'wb') as w:for bunk in font_woff:w.write(bunk)# 使用fonttools对基本字体文件做解析base_font = TTFont('basefont.woff')base_num = ['8', '7', '9', '0', '1', '5', '4', '6', '3', '2']base_code = ['uniF860', 'uniF408', 'uniEF2B', 'uniF875', 'uniE03A', 'uniEA55', 'uniEE0E', 'uniF7A4', 'uniE3B1', 'uniF813']# 将新下载的字体文件与基本字体文件做对比onlineFonts = TTFont('maoyan.woff')uni_list = onlineFonts.getGlyphNames()[1:-1]temp = {}for i in range(10):onlineGlyph = onlineFonts['glyf'][uni_list[i]]for j in range(10):baseGlyph = base_font['glyf'][base_code[j]]if onlineGlyph == baseGlyph:temp[uni_list[i][3:].lower()] = base_num[j]return temp

源码

该源码实际测试可行,待优化地方极多

# -*- coding; utf-8 -*-
import requests
from bs4 import BeautifulSoup
import struct
import zlib
import re
from fontTools.ttLib import TTFontclass get_maoyan():def __init__(self):self.header = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","Accept-Encoding": "gzip, deflate, br","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "max-age=0","Connection": "keep-alive","Cookie": "__mta=250379193.1530718965618.1552724185734.1552724186874.62; _""lxsdk_cuid=16465f5cf2dc8-0994698fdc2ac7-16386950-fa000-16465f5cf2dc8; ""uuid_n_v=v1; uuid=7C57E28047C311E991B9E9D2BD010A06F94D2F7FE0214E68BD819AD9CE2300A3; _""csrf=c2cda66b44c7a9967419cf9f1380acb41f32261f8158b5d047a141f9beefb3a3; _""lxsdk=7C57E28047C311E991B9E9D2BD010A06F94D2F7FE0214E68BD819AD9CE2300A3; __""mta=250379193.1530718965618.1552724158451.1552724183308.61; _""lxsdk_s=1698590d4c2-02c-2b-16a%7C%7C45","Host": "maoyan.com","Referer": "https://maoyan.com/board/6","Upgrade-Insecure-Requests": "1","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 ""(KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"}self.url = 'https://maoyan.com/board/1'self.maoyan_dict = dict()def get_page_info(self):repon = requests.get(self.url, headers=self.header)if repon.status_code == 200:soup = BeautifulSoup(repon.text, 'lxml')else:return -1# 获得当前页面的字体文件路径woff_style = soup.select('style')[0]# print(woff_style)for line in woff_style.text.split('\n'):if 'woff' in line:is_line = linefont_url = 'http:' + re.search('//vfile.*?(woff)', is_line).group(0)self.maoyan_dict = self.get_maoyan_dict(font_url)# print(self.maoyan_dict)movies = soup.select('.board-wrapper')movie_list = movies[0].select('dd')for i in range(len(movie_list)):movie_name = movie_list[i].select('.movie-item-info')[0].select('.name')[0].textmovie_star = movie_list[i].select('.star')[0].text[3:]movie_date = movie_list[i].select('.releasetime')[0].textreal_money = movie_list[i].select('.realtime')[0].select('.stonefont')[0].textreal_unit = movie_list[i].select('.realtime')[0].text[-2]total_money = movie_list[i].select('.total-boxoffice')[0].select('.stonefont')[0].texttotal_unit = movie_list[i].select('.total-boxoffice')[0].text[-2]print('电影: ', movie_name)print('主演: ', movie_star)print('上映时间: ', movie_date)print('实时票房: ', self.convert_boxoffice(real_money), real_unit)print('总票房: ', self.convert_boxoffice(total_money), total_unit)def get_maoyan_dict(self, url):font_woff = requests.get(url, stream=True)with open('maoyan.woff', 'wb') as w:for bunk in font_woff:w.write(bunk)base_font = TTFont('basefont.woff')base_num = ['8', '7', '9', '0', '1', '5', '4', '6', '3', '2']base_code = ['uniF860', 'uniF408', 'uniEF2B', 'uniF875', 'uniE03A', 'uniEA55', 'uniEE0E', 'uniF7A4', 'uniE3B1', 'uniF813']onlineFonts = TTFont('maoyan.woff')uni_list = onlineFonts.getGlyphNames()[1:-1]temp = {}for i in range(10):onlineGlyph = onlineFonts['glyf'][uni_list[i]]for j in range(10):baseGlyph = base_font['glyf'][base_code[j]]if onlineGlyph == baseGlyph:temp[uni_list[i][3:].lower()] = base_num[j]return tempdef convert_boxoffice(self, money):byte_money = money.__repr__()# print(byte_money)money_num_list = byte_money.split('\\u')# print(money_num_list)rea_money = ''for byte_num in money_num_list:num = self.maoyan_dict.get(byte_num[:4], byte_num[:4])# print(byte_num, num)rea_money = f'{rea_money}{num}{byte_num[4:]}'return rea_money[1:-1]if __name__ == '__main__':a = get_maoyan()a.get_page_info()

【Python爬虫】爬取猫眼电影票房相关推荐

  1. 记第一天使用node做爬虫——爬取猫眼电影票房总榜以及指定电影的豆瓣评论前200条

    首先,我是一个做前端的应届生,今天朋友想让我帮忙爬取猫眼电影票房总榜的数据,但是我之前一点都没接触过爬虫,但我还是说:okk,我试试: 然后试试就逝世,各种坑接踵而来: 提前声明:这篇文章暂时只是获取 ...

  2. Python爬虫爬取猫眼电影风语咒影评评论信息

    风语咒作为扛起国漫崛起的又一国漫之作,爬取风语咒猫眼的电影评论数据,以便对其评论做之后的数据分析. 此次demo的流程图如下: 一.找到猫眼电影中风语咒影评得json数据: l 找出url后,往下滚动 ...

  3. python爬虫 爬取猫眼电影数据

    # 定义一个函数获取猫眼电影的数据​ import requestsdef main():url = url = 'http://maoyan.com/board/4?offset=0'html = ...

  4. python爬虫--爬取-猫眼电影-代码

    import re import requests class Mao():def __call__(self, *args, **kwargs):"""当前类的对象当做 ...

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

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

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

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

  7. Python爬虫爬取豆瓣电影评论内容,评论时间和评论人

    Python爬虫爬取豆瓣电影评论内容,评论时间和评论人 我们可以看到影评比较长,需要展开才能完整显示.但是在网页源码中是没有显示完整影评的.所以我们考虑到这部分应该是异步加载的方式显示.所以打开网页的 ...

  8. 【python教程入门学习】Python爬虫抓取猫眼电影排行榜

    本节使用 Python 爬虫抓取猫眼电影网 TOP100 排行榜(https://maoyan.com/board/4)影片信息,包括电影名称.上映时间.主演信息. 在开始编写程序之前,首先要确定页面 ...

  9. Python3爬虫——爬取猫眼电影排行

    一.爬取猫眼电影排行 目标:提取猫眼电影TOP100的电影排名.名称.主演.上映时间.评分.海报链接. URL:https://maoyan.com/board/4 保存:JSON # 版本:Pyth ...

最新文章

  1. 支撑亿级用户“刷手机”​,百度Feed流背后的新技术装备有多牛?
  2. 漫画:什么是 HTTPS 协议?
  3. UITests操作指南
  4. 【Linux】一步一步学Linux——tail命令(42)
  5. 如果唐代诗人有微博,简直就是真实版「梦回大唐」
  6. sonarqube怎么分析php项目,SonarQube代码质量分析平台介绍
  7. 将Eclipse中的工程保存到Github的操作步骤
  8. linux mysql安装及密码相关问题(2)和navicat整合连接
  9. Qt5开发及实例学习之监听目录
  10. 横坐标设置_默认设置解决不了?!三种办法来解决,保住了Excel的“面子”
  11. 孙鑫VC学习笔记:第十二讲 (一) 介绍常量指针、指针常量,文本、二进制文件
  12. kuangbin 基础DP1
  13. WIN10更新后遗症+解决方案2——Solidworks注册机闪退
  14. python二元函数图像在线绘制_Python之Numpy:二元函数绘制/三维数据可视化/3D
  15. html5 梵高 星,上海梵高星空艺术馆门票
  16. git rebase操作
  17. RabbitMQ优化消息阻塞系列(一)解决方案梳理
  18. 微信小程序海报功能(canvas)- - -附效果图
  19. MySQL 8 的学习——4从表中检索信息
  20. Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击

热门文章

  1. 群论基础速成(6):五大著名群族
  2. 游戏原画是怎样的?加班多么?
  3. Mac电脑访问不了正常URL
  4. laragon mysql版本_laragon mysql8 安装
  5. 如何用laragon框架运行php文件
  6. 读《富爸爸,穷爸爸》后感(三)
  7. 编写短信验证码(Java基础)
  8. linux物联网项目,6个开源项目提升物联网开发效率
  9. python实现趋势外推法
  10. 2023必火的5种服装店装修风格,看看哪种风格适合你家店?