0
点赞
收藏
分享

微信扫一扫

【Python爬虫】解析百科地址

记录时间 : 2020/08/05

前言 :常用反爬方法设置headers,需要在headers的中设置Referer的值,Referer的值是个网址。网址可能会用到加密、转换等方法获得。

摘要 : 这次记录的是百度百科网址转换方法之一。

测试包括 : 魑、 *、$、listen()、9527

预想: 此次内容适用中文字符、符号
【特殊字符请前先自行测试】

内容记录

  • 构想
    1. 英文和中文转为十六进制(UTF-8)
    2. 左数开始加“%”,然后每两位加“%”
  • 代码
  1. 使用For循环语句
chinese = ["魑","*","$"]

# 字符串先变十六进制再每两位插入百分号
def urlFrame_One():
for name in chinese:
# name为字符串,按照指定的 encoding 将字符串转换为字节序列
namestr = bytes(name, 'UTF-8')
# hex() 函数用于将10进制整数转换成16进制
namehex = namestr.hex()
# text存十六进制字符串
text = ""
# i存字符串长度
i = len(namehex)
for n in range(i // 2):
# str存放截取字符串,建议从后往前截取字符
str = namehex[i - 2 * (n + 1): i - 2 * n]
# 将str从后往前串接
text = "%" + str + text
print("https://baike.baidu.com/item/" + text)

if __name__ == '__main__':
urlFrame_One()
https://baike.baidu.com/item/%e9%ad%91
https://baike.baidu.com/item/%2a
https://baike.baidu.com/item/%24
  1. 使用Python迭代器
chinese = ["魑","*","$"]


# 字符串先变十六进制再每两位插入百分号
def urlFrame_Two():
# 生成 iter 迭代器
a = iter(chinese)
while True:
try:
namebytes = bytes(next(a), 'UTF-8')
# print(namebytes)
namehex = namebytes.hex()
i = len(namehex)
# generator 生成器
# g is generator type
# next(g) is str type
g = ("%" + namehex[2 * (n - 1):2 * n] for n in range(1, i // 2 + 1))
# b = ("%" + str(next(g)) + str() for n in range(i // 2))
print("https://baike.baidu.com/item/" + ''.join(list(g)))
# StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况
except StopIteration:
sys.exit()


if __name__ == '__main__':
urlFrame_Two()

输出

https://baike.baidu.com/item/%e9%ad%91
https://baike.baidu.com/item/%2a
https://baike.baidu.com/item/%24

验证:将网址copy到浏览器

报错记录
报错代码​​​TypeError: 'float' object cannot be interpreted as an integer​​​ 报错原因​​Python2 中整数 / 整数 = 整数,Python3 中整数 / 整数 = 浮点,整数 // 整数 = 整数​


举报

相关推荐

0 条评论