1. python反反爬,爬取猫眼评分.
    解决网站爬取时,内容类似:$#x12E0;样式,且每次字体文件变化。
    下载FontCreator

  1. .
  1. FontCreator打开base.woff.查看对应字体关系

初始化时将对应关系写入字典中。

  1.  
  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. # __author__ = "南楼"
  4.  
  5. import requests
  6. import re
  7. import os
  8.  
  9. from fontTools.ttLib import TTFont
  10.  
  11. #下载字体
  12. class MaoYan(object):
  13.  
  14. def __init__(self):
  15. self.url = 'http://maoyan.com/films/1198214'
  16. self.headers = {
  17. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
  18. }
  19. self.base_num = {} # 编号—数字
  20. self.base_obj = {} # 编号—对象
  21. # base.woff 为当前网站下载的一个字体
  22. self.base_font_file = TTFont('./fonts/base.woff')
  23. # 需要先下载字体编辑软件(FontCreator),以便查看对应关系
  24. self.base_num["uniF3BA"] = ""
  25. self.base_num["uniF2A9"] = ""
  26. self.base_num["uniE6A5"] = ""
  27. self.base_num["uniF680"] = ""
  28. self.base_num["uniE69C"] = ""
  29. self.base_num["uniE710"] = ""
  30. self.base_num["uniE07D"] = ""
  31. self.base_num["uniE5A7"] = ""
  32. self.base_num["uniEC7A"] = ""
  33. self.base_num["uniE2A3"] = ""
  34.  
  35. for key in self.base_num:
  36. self.base_obj[key] =self.base_font_file['glyf'][key]
  37.  
  38. def baseobj(self):
  39. for key in self.base_num:
  40.  
  41. self.base_obj[key] =self.base_font_file['glyf'][key] # 获得woff内编号对应的字体对象
  42. return self.base_obj
  43.  
  44. # 发送请求获得响应
  45. def get_html(self, url):
  46. response = requests.get(url, headers=self.headers)
  47. return response.content
  48.  
  49. def create_font(self, re_font_file):
  50. # 列出已下载文件
  51. file_list = os.listdir('./fonts')
  52. # 判断是否已下载
  53. if re_font_file not in file_list:
  54.  
  55. print('不在字体库中, 下载:', re_font_file)
  56. url = 'http://vfile.meituan.net/colorstone/' + re_font_file
  57. new_file = self.get_html(url)
  58. with open('./fonts/' + re_font_file, 'wb') as f:
  59. f.write(new_file)
  60.  
  61. # 打开字体文件,创建 self.font_file属性
  62. self.font_file = TTFont('./fonts/' + re_font_file)
  63.  
  64. def get_num_from_font_file(self, re_star):
  65.  
  66. newstar = re_star.upper().replace("&#X", "uni")
  67. realnum = newstar.replace(";", "")
  68. numlist = realnum.split(".")
  69. # gly_list = self.font_file.getGlyphOrder() #uni列表['glyph00000', 'x', 'uniF680', 'uniE2A3', 'uniE710', 'uniE69C', 'uniEC7A', 'uniF2A9', 'uniE5A7', 'uniE07D', 'uniE6A5', 'uniF3BA']
  70. star_rating = []
  71. for hax_num in numlist:
  72. font_file_num = self.font_file['glyf'][hax_num]
  73. for key in self.baseobj():
  74. if font_file_num == self.base_obj[key]:
  75. star_rating.append(self.base_num[key])
  76. # 星级评分待优化,暂不支持10.0,
  77. star_rating = star_rating[0]+"."+star_rating[1]
  78. return star_rating
  79.  
  80. def start_crawl(self):
  81. html = self.get_html(self.url).decode('utf-8')
  82.  
  83. # 正则匹配字体文件
  84. re_font_file = re.findall(r'vfile\.meituan\.net\/colorstone\/(\w+\.woff)', html)[0]
  85. self.create_font(re_font_file)
  86. # 正则匹配星级评分
  87. re_star_rating = re.findall(r'<span class="index-left info-num ">\s+<span class="stonefont">(.*?)</span>\s+</span>', html)[0]
  88. star_rating = self.get_num_from_font_file(re_star_rating)
  89. print("星级评分:", star_rating)
  90.  
  91. if __name__ == '__main__':
  92.  
  93. m = MaoYan()
  94. m.start_crawl()

python反反爬,爬取猫眼评分的更多相关文章

  1. python+requests+re匹配抓取猫眼上映电影信息

    python+requests抓取猫眼中上映电影,re正则匹配获取对应电影的排名,图片地址,片名,主演及上映时间和评分 import requests import re, json def get_ ...

  2. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  3. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  4. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  5. 【Python必学】Python爬虫反爬策略你肯定不会吧?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 正文 Python爬虫反爬策略三部曲,拥有这三步曲就可以在爬虫界立足了: ...

  6. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  7. 票房和口碑称霸国庆档,用 Python 爬取猫眼评论区看看电影《我和我的家乡》到底有多牛

    今年的国庆档电影市场的表现还是比较强势的,两名主力<我和我的家乡>和<姜子牙>起到了很好的带头作用. <姜子牙>首日破 2 亿,一举刷新由<哪吒之魔童降世&g ...

  8. python应用-爬取猫眼电影top100

    import requests import re import json import time from requests.exceptions import RequestException d ...

  9. Python 爬取 猫眼 top100 电影例子

    一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...

随机推荐

  1. PHP 根据子ID递归获取父级ID,实现逐级分类导航效果

    代码: //当前路径 $cate=M('wangpan_class')->select(); function get_top_parentid($cate,$id){ $arr=array() ...

  2. VIM编辑器用法

    Vim (vim + filename有则进入文件,无则创建并进入文件)>进入编辑模式,包括命令模式.插入模式.末行模式,具体命令: 按esc进入命令模式 按'shift' + ':'进入末行模 ...

  3. hook NtTerminateProcess进行应用的保护

    这段时间在学习驱动,然后看到hook ssdt的代码,找了一个写的清晰的学习了一下:http://www.netfairy.net/?post=218 这里是hook NtOpenProcess,但是 ...

  4. 图片上传 new FormData() ,new FileReader()

    多图片和单图片取决于 multiple属性,下面来介绍下 new FileReader() reader.readAsDataUrl(file[0]) 可以看到文件是Base64的, let fd = ...

  5. EASYUI combobox firefox 下取值为空的问题或不支持中文检索的问题

    输入中文包含数字 或者全部非中文是没问题的,这个是因为火狐浏览器输入中文输入法的时候 只能触发onkeyup而不能触发onkeydown的问题.而easyui渲染后赋值给隐藏input的过程需要 依赖 ...

  6. lamdba表达式

    lambda表达式是一个可传递的代码块,可以在以后执行一次或多次. lambda表达式的语法: 1. 参数 -> 表达式(无需指定返回类型) (String first, String seco ...

  7. 如何组织AxTOCControl里面的数据

    如何组织AxTOCControl里面的数据,实际上是组织AXMapControl的数据,将添加的数据进行整理.代码在最后面. 思路参考自: https://blog.csdn.net/u0124887 ...

  8. oracle连表语法

    1.笛卡尔积 (表一乘以表二) (表连接建立在笛卡尔积上过滤) select * from emp,dept; 2.等值连接 (表与表之见有相同的列表) select ename,dname from ...

  9. qss qt按钮自定义

  10. Azure Pipelines-部署代理问题

    使用Azure Pipelines时代理脚本一直不成功,根据官方提示,可以使用下方的注册脚本自动执行代理 实际执行过程中,经常是无法执行完成,仔细阅读脚本,发现该脚本一共做了如下几步: 1.下载代理  ...