python反反爬,爬取猫眼评分

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

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

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



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

原文地址:https://www.cnblogs.com/cola-lxj/p/10773563.html

时间: 2024-08-30 08:26:12

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

Python冒充其他浏览器抓取猫眼电影数据(绕过反爬虫)

原文地址:http://blog.51cto.com/2290153/2127855

python爬取猫眼电影top100排行榜

爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90)1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中;2). 所有的图片保存到本地/mnt/maoyan/电影名.png 代码: import re import pymysql as mysql from urllib import request from urllib.request import urlopen u = 'root' p = 'root'

Python使用asyncio+aiohttp异步爬取猫眼电影专业版

asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访问网页是阻塞的,无法并发,所以我们需要一个更牛逼的库 aiohttp ,它的用法与requests相似,可以看成是异步版的requests,下面通过实战爬取猫眼电影专业版来熟悉它们的使用: 1. 分析 分析网页源代码发现猫眼专业版是一个动态网页,其中的数据都是后台传送的,打开F12调试工具,再刷新网

python爬取猫眼专业版-实时票房

& #!/usr/bin/env python #coding:utf-8 import requests def jsonresponse(url):     response = requests.get(url)     return response.json() #定义个映射表,页面信信息字段>含义 infomappingtable ={     "splitTotalBoxInfo":"今日实时(分账票房)信息",     "sp

14-Requests+正则表达式爬取猫眼电影

'''Requests+正则表达式爬取猫眼电影TOP100''''''流程框架:抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果.正则表达式分析:根据HTML代码分析得到电影的名称.主演.上映时间.评分.图片链接等信息.保存至文件:通过文件的形式保存结果,每一部电影一个结果一行Json字符串.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度.'''import requestsimport refrom requests.exceptions impor

# [爬虫Demo] pyquery+csv爬取猫眼电影top100

目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.com/board/4?offset=0 翻页操作只会改变offset偏移量,每部电影的信息都在dd标签内,使用pyquery库中的css选择器直接解析页面 代码君 css选择器直接选择和使用find()方法的区别:find()用于选择子节点,因此限定了选择的区域,速度可能要快些,直接传入''选择器可能

爬取猫眼电影

爬去猫眼电影正字热映电影榜单的前五页: #爬取猫眼电影正在热映前5面的所有电影 import requests from requests import RequestException import re def get_one_page(url): header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.8

反爬机制及反反爬策略

1.UA检测 UA,即 User-Agent,是HTTP请求头部信息的一个属性,它是用户访问网站时的浏览器标识,可以通过审查元素或者开发者工具中看到.一些网站通过检测UA从而确定请求的对象是脚本程序还是正常的用户通过浏览器请求,实现反爬虫的目的. 反反爬策略:构造自己的UA池,使得每次用程序向网站发请求时都随机带上正常的UA标识,更好的模拟浏览器行为.有些网站还会有反爬时间或者频率的限制,因此,最好可以再设置一个 timeout ,最好是随机休眠,Python中可以使用 time.sleep()

Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名.链接.评分.一句话评价-- 1. 爬取单个信息 我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath: 得到第一本书<追风筝的人>的书名xpath如下: //*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a 得到xpath,我们就可以按照之前的方法来尝试一下: 返回的竟然是