Python中urllib网页跳转处理与编码识别
本文最后更新于 481 天前,其中的信息可能已经有所发展或是发生改变。
sohu_GBK

接着上一篇写,在网页中,很多情况下网页编码数UTF-8的,当然,这是为了推动世界和平。
但是总有那么一些人不喜欢UTF-8:很奇怪啊,很多大站点用的都是GBK啊。
好了,不放嘴炮了,说正题。

还有一些情况,网页会通过http-equiv=refresh指令的方式实现301跳转,譬如百度就这么做的,你试试访问baidu.com?看看状态码。

那怎么判断编码和跳转指令呢?
祭出正则大法:

def find_meta(head_sendback):
# Author : [email protected]
    head_sendback = str(head_sendback)
    regx_charset = """charset=("|')?(.*?)("|')"""
    regx_charset = re.compile(regx_charset)
    regx_equiv = r'http-equiv="?(.*?)"'
    regx_equiv = re.compile(regx_equiv)
    try:
        charset = regx_charset.findall(head_sendback)[0][1]
    except IndexError:
        charset = "UTF-8"
    try:
        equiv = regx_equiv.findall(head_sendback)[0].strip('"')
    except IndexError:
        equiv = None
    return [equiv,charset]

返回的equiv是指令,可以通过判断是否为refresh的方式控制跳转,charset是编码方式,如网页未指定,默认为UTF-8

给函数可以传入通过上一篇文章介绍过的已经解压缩过的网页代码来识别。

如何识别要跳转的URL和等待时间呢?
祭出正则大法·····:

def redirect_url(data):
# Author : [email protected]
    regx_find_reurl = r'content="([0-9]+);url=(.*?)"'
    regx_find_reurl = re.compile(regx_find_reurl)
    redirect_info = regx_find_reurl.findall(data)
    redirect_timewait = redirect_info[0][0]
    redirect_target = redirect_info[0][1]
    return redirect_timewait,redirect_target

返回的redirect_timewait是等待时间,redirect_target是跳转目标,剩下就看各位君要干什么了。
TIPS:大家可以通过维护一个数组来判断是否重复跳转,防止重定向循环。

写的干货很多吧,我对大家很好的啦n(*≧▽≦*)n

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇