当前位置 : 主页 > 编程语言 > python >

【Python爬虫】解析百科地址

来源:互联网 收集:自由互联 发布时间:2022-07-02
记录时间 : 2020/08/05 前言 :常用反爬方法设置headers,需要在headers的中设置Referer的值,Referer的值是个网址。网址可能会用到加密、转换等方法获得。 摘要 : 这次记录的是百度百科网

记录时间 : 2020/08/05


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


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


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


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


内容记录

  • 构想
    1. 英文和中文转为十六进制(UTF-8)
    2. 左数开始加“%”,然后每两位加“%”
  • 代码
  • 使用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
  • 使用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 中整数 / 整数 = 浮点,整数 // 整数 = 整数​​


    网友评论