参考博文:https://blog.csdn.net/weixin_42866931/article/details/110522587
练习反爬链接:http://glidedsky.com/level/crawler-font-puzzle-1
部分代码
.....
results = 0
for page_num in range(1, 5):
await asyncio.wait_for(page.goto(url.format(page_num)), timeout=1000)
content = await page.content()
results += await self.parse_detail(content)
print(results)
# 解析每一页的内容,返回总值的结果
async def parse_detail(self, content):
from pyquery import PyQuery
map_coding = {'three': '3', 'eight': '8', 'four': '4', 'two': '2', 'zero': '0',
'seven': '7', 'six': '6', 'five': '5', 'one': '1', 'nine': '9'}
base64_str = re.findall('base64,(.*?)\)', content)[0]
b = base64.b64decode(base64_str) # base64解码
font = TTFont(io.BytesIO(b)) # 读取ttf数据
data_map = {} # k为html数,v为显示的数
for k, v in enumerate(font.getGlyphOrder()[1:]):
print(f'GlyphID(id="{k}" name="{v}") \t|\t Key:{map_coding[v]} Value:{k}')
data_map.update({map_coding[v]: str(k)})
doc = PyQuery(content)
li = (doc('div.row').text()).split('\n')
print(f"加密:{li}")
new_li = []
while li:
m, n = li.pop(0), ''
for i in m:
n += i.replace(i, data_map[i])
new_li.append(n)
result = reduce(lambda x, y: int(x) + int(y), new_li)
print(f"解密:{new_li} 总和:{result}")
return result
输出:
GlyphID(id="0" name="seven") | Key:7 Value:0
GlyphID(id="1" name="eight") | Key:8 Value:1
GlyphID(id="2" name="three") | Key:3 Value:2
GlyphID(id="3" name="one") | Key:1 Value:3
GlyphID(id="4" name="four") | Key:4 Value:4
GlyphID(id="5" name="five") | Key:5 Value:5
GlyphID(id="6" name="nine") | Key:9 Value:6
GlyphID(id="7" name="zero") | Key:0 Value:7
GlyphID(id="8" name="two") | Key:2 Value:8
GlyphID(id="9" name="six") | Key:6 Value:9
加密:['823', '884', '379', '357', '153', '168', '846', '865', '882', '366', '333', '850']
解密:['182', '114', '206', '250', '352', '391', '149', '195', '118', '299', '222', '157'] 总和:2635
GlyphID(id="0" name="three") | Key:3 Value:0
GlyphID(id="1" name="eight") | Key:8 Value:1
GlyphID(id="2" name="five") | Key:5 Value:2
GlyphID(id="3" name="zero") | Key:0 Value:3
GlyphID(id="4" name="seven") | Key:7 Value:4
GlyphID(id="5" name="six") | Key:6 Value:5
GlyphID(id="6" name="four") | Key:4 Value:6
GlyphID(id="7" name="two") | Key:2 Value:7
GlyphID(id="8" name="one") | Key:1 Value:8
GlyphID(id="9" name="nine") | Key:9 Value:9
加密:['837', '896', '871', '576', '073', '525', '829', '509', '595', '892', '513', '804']
解密:['104', '195', '148', '245', '340', '272', '179', '239', '292', '197', '280', '136'] 总和:2627
GlyphID(id="0" name="nine") | Key:9 Value:0
GlyphID(id="1" name="five") | Key:5 Value:1
GlyphID(id="2" name="zero") | Key:0 Value:2
GlyphID(id="3" name="six") | Key:6 Value:3
GlyphID(id="4" name="three") | Key:3 Value:4
GlyphID(id="5" name="seven") | Key:7 Value:5
GlyphID(id="6" name="two") | Key:2 Value:6
GlyphID(id="7" name="one") | Key:1 Value:7
GlyphID(id="8" name="eight") | Key:8 Value:8
GlyphID(id="9" name="four") | Key:4 Value:9
加密:['092', '579', '601', '519', '523', '516', '48', '591', '556', '025', '634', '506']
解密:['206', '150', '327', '170', '164', '173', '98', '107', '113', '261', '349', '123'] 总和:2241
GlyphID(id="0" name="nine") | Key:9 Value:0
GlyphID(id="1" name="three") | Key:3 Value:1
GlyphID(id="2" name="zero") | Key:0 Value:2
GlyphID(id="3" name="four") | Key:4 Value:3
GlyphID(id="4" name="two") | Key:2 Value:4
GlyphID(id="5" name="five") | Key:5 Value:5
GlyphID(id="6" name="one") | Key:1 Value:6
GlyphID(id="7" name="six") | Key:6 Value:7
GlyphID(id="8" name="seven") | Key:7 Value:8
GlyphID(id="9" name="eight") | Key:8 Value:9
加密:['088', '363', '469', '051', '353', '067', '326', '78', '434', '375', '059', '394']
解密:['299', '171', '370', '256', '151', '278', '147', '89', '313', '185', '250', '103'] 总和:2612