python可以爬取58同城代码_爬取58同城—字体反爬
我爬取的是58同城北京租房的索引页。
url:https://bj.58.com/chuzu/?PGTID=0d100000-0000-1e00-4039-99b26a4fedeb&ClickID=2
审查元素可知网站进行了字体加密,直接复制网页中的数字得到的也是乱码,因此我们需要找到一个映射关系,加密字符映射到我们想要的数字。
打开network中的doc,我们发现这里面的数字是这样一堆十六进制码,并且每次刷新网页这些十六进制码所对应的数字都是变化的,而且我们发现每个这种标签他的类标签都是strongbox。
然后我们在network中查看font下的数据包,把这个包下载下来,并用fontCreator打开,我们会发现这个就是我们所需要的字体文件
在python下用fonttools进行解析为xml文件,我们会发现两个映射关系
1.glyph00001->1 glyph00002->2以此类推
2.cmap中的map有code与glyph有映射。
看到这里我们就有思路了,我们只需要通过name=glyph来建立一个code与数字的字典映射就好了。
一、获取字体文件。
因为每次请求网页,获取的字体文件是不一样的,所以我们需要把字体文件保存下来。而这个字体文件的url是经过加密的,直接请求不了。不过我们发现他是经过base64进行加密的,我们只需要从网页源代码中找到这一长串字符,进行base64解码就行、
# 获取字体文件,保存到本地
def get_font_data(html):
b64 = re.search('base64,(.*?)\'\)', html)
# print(b64.group(1))
b = base64.b64decode(b64.group(1))
with open('house.ttf', 'wb') as f:
f.write(b)
二、解析字体文件,建立映射关系、
使用fonttools把字体文件转成xml,然后建立映射关系,这里要注意getBestCmap()方法获取到的code与glyph的映射中,code是十进制,要把它转换成十六进制才可以。# 解析xml文件,建立映射关系
def parse_xml():
font = TTFont('house.ttf')
font.saveXML('house.xml')
f_dict = font.getBestCmap() # 获取到的code值为十进制,需要转到十六进制
new_map = dict()
for key in f_dict.keys():
value = int(re.findall('\d+', f_dict[key])[0]) - 1
key = hex(key).replace('0', '') # 十进制转十六进制,并转换成网页中显示的样式
new_map[key] = value
return new_map
三、替换网页中的字符。
直接用replace方法对源代码进行字符替换。# 把网页中的编码替换成数字
def get_new_html(new_map, html):
for key in new_map.keys():
# print(key)
html = html.replace(key + ';', str(new_map[key]))
return html
四、完整代码。from fontTools.ttLib import TTFont
import requests
import re
import base64
from lxml import etree
# 58 同城,租房,数字字体加密
# 先将字符映射到 字符编码 ,再通过字符编码映射到真实数字
# 获取字体文件,保存到本地
def get_font_data(html):
b64 = re.search('base64,(.*?)\'\)', html)
# print(b64.group(1))
b = base64.b64decode(b64.group(1))
with open('house.ttf', 'wb') as f:
f.write(b)
# 解析xml文件,建立映射关系
def parse_xml():
font = TTFont('house.ttf')
font.saveXML('house.xml')
f_dict = font.getBestCmap() # 获取到的code值为十进制,需要转到十六进制
new_map = dict()
for key in f_dict.keys():
value = int(re.findall('\d+', f_dict[key])[0]) - 1
key = hex(key).replace('0', '') # 十进制转十六进制,并转换成网页中显示的样式
new_map[key] = value
return new_map
# 把网页中的编码替换成数字
def get_new_html(new_map, html):
for key in new_map.keys():
# print(key)
html = html.replace(key + ';', str(new_map[key]))
return html
def parse_html(html):
content = etree.HTML(html)
title_li = content.xpath('/html/body/div[6]/div[2]/ul/li/div[2]/h2/a/text()')
price_li = content.xpath('/html/body/div[6]/div[2]/ul/li/div[3]/div[2]/b/text()')
for title, price in zip(title_li, price_li):
print(str(title).strip(), str(price).strip())
if __name__ == '__main__':
start_url = 'https://bj.58.com/chuzu/?PGTID=0d200001-0000-19e8-01d8-7a91306f22d9&ClickID=1'
response = requests.get(url=start_url)
html = response.text
get_font_data(html)
new_map = parse_xml()
new_html = get_new_html(new_map, html)
parse_html(new_html)
python可以爬取58同城代码_爬取58同城—字体反爬相关推荐
- Python爬虫 | 以滑雪为例演示大众点评商铺信息采集(字体反爬)
文章目录 1.简述 2.字体反爬处理 2.1.获取字体文件链接 2.2.创建三类字体与实际字符映射关系 3.单页店铺信息解析 4.全部页数据获取 4.1.获取数据页数 4.2.采集全部数据 5.总结 ...
- python爬虫笔记五:汽车之家贴吧信息(字体反爬-动态映射)
学习网址: https://jia666666.blog.csdn.net/article/details/108974149 ----------------------------------- ...
- Python +tensorflow+pygame 破解任意字体反爬
什么是字体反爬? 每个字符在 都可以用 unicode 编码表示 而字体文件可以理解为Unicode 和 字体形状的映射 ,所以在计算机中字符可以变成我们人类所能理解的形状,所以字体反爬的关键就是字 ...
- 爬虫学习笔记(二十)—— 字体反爬
文章目录 一.什么是字体反爬 二.编码原理 2.1.ASCII编码对照表 2.2.Unicode编号 2.3.UTF-8编码方式 2.4.字符矢量图 三.案例:58同城反爬字体 3.1.代码实现 一. ...
- 反爬终极方案总结---字体反爬
最近临时受命,要针对采集我司网站的爬虫进行反制.虽然不太熟悉这个领域,但既然分到咱这儿了,那就上呗,有啥说的,谁让咱是"全栈工程师"呢(牛逼吹的大了点). 原本公司已经有了一套字体 ...
- 爬虫 某全国律师执业诚信信息公示平台 DES加密+中文字体反爬
某全国律师执业诚信信息公示平台 DES加密+中文字体反爬 目标网站:aHR0cHM6Ly9jcmVkaXQuYWNsYS5vcmcuY24v 无限debugger DES加密 中文字体反爬 目标网站: ...
- python爬虫爬取58网站数据_Python爬虫,爬取58租房数据 字体反爬
Python爬虫,爬取58租房数据 这俩天项目主管给了个爬虫任务,要爬取58同城上福州区域的租房房源信息.因为58的前端页面做了base64字体加密所以爬取比较费力,前前后后花了俩天才搞完. 项目演示 ...
- python爬取猫眼遇到动态字体反爬
前一段时间,爬取了58同城,发现当时的网页对数字有字体反爬虫,然后废了九牛二虎之力找到了规律,终于破解了反爬虫,后来发现猫眼的这个网页虽然使用了字体反爬,但是和原来的58同城还是有很大的差别,后来了解 ...
- python爬取实习僧招聘信息字体反爬
参考博客:http://www.cnblogs.com/eastonliu/p/9925652.html 实习僧招聘的网站采用了字体反爬,在页面上显示正常,查看源码关键信息乱码,如下图所示: 查看网页 ...
- 58同城数字字体反爬
1.什么是字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的ttf文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容 比如5 ...
最新文章
- (以pytorch为例)路径(深度)的正则化方法的简单理解-drop path
- Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑
- Dubbo系列(3)_官方Demo说明
- 套接字选项SO_KEEPALIVE
- “挖空三座山、装了几万台服务器”的绿色数据中心
- 苹果欲借免费纳米SIM卡技术控制行业标准
- 你研究过单例么?这样写单例效率最高.
- protobufjs 命令执行_protobufjs简单使用
- Django REST framework 源码中提供的默认配置
- php 执行mysql查询_php中执行mysql的常用操作
- 別人的心得。。。。。學習
- python socket 通信(2) 协程实现多人聊天室
- 实用的在线文本分析工具
- VS2015导出带文件的项目模板
- html三角形下拉列表,select自定义小三角样式代码(实用总结)
- matlab画概率密度图
- python音乐编程_可以编程写音乐的python库musicpy教程(第一期) musicpy的数据结构...
- 惠普打印机爆远程命令执行漏洞,黑客可任意操纵你的打印机
- 用犯罪分析软件CrimeStat做热点图、层次空间聚类图、时空移动平均图
- 电脑管家修复DNS服务器,DNS是什么?dns劫持是怎么回事?怎么处理?
热门文章
- 手机无网状态下获取经纬度,离线定位的方法。
- mysql 花生壳 2003_基于HTTP协议实现的小型web服务器的方法
- 软件实施工程师入坑经历
- Python字典合并方法大全
- 树莓派+小程序开发(一)
- 【实时渲染】RTR4 简要问答版
- 华为、腾讯、百度扎堆进入的自动驾驶仿真市场,到底藏着怎样的秘密?
- 纯html折叠文字代码,不用JS,教你只用纯HTML做出几个实用网页效果
- 测试开发实习日记(DAY1)
- win7/win8卸载matlab时提示 bummer -uninstller error exeption calling main