一篇文章带你搞定Python中urllib库(操作URL)

一、操作URL

urllib提供了一系列用于操作URL的功能。分类讲解相关内容。

二、Get()

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:

例如,对豆瓣的URLhttps://api.growingio.com/v2/22c937bbd8ebd703f2d8e9445f7dfd03/web/pv?stm=1593747087078进行抓取,并返回响应:

一篇文章带你搞定Python中urllib库(操作URL)

from urllib import requestwith request.urlopen('https://api.growingio.com/v2/22c937bbd8ebd703f2d8e9445f7dfd03/web/pv?stm=1593747087078') as f:    data = f.read()    print('Status:', f.status, f.reason)    for k, v in f.getheaders():        print('%s: %s' % (k, v))    print('Data:', data.decode('utf-8'))

登录后复制

可以看到HTTP响应的头和JSON数据:

一篇文章带你搞定Python中urllib库(操作URL)

如果要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,就可以把请求伪装成浏览器。例如,模拟iPhone 6去请求豆瓣首页:

from urllib import requestreq = request.Request('http://www.douban.com/')req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')with request.urlopen(req) as f:    print('Status:', f.status, f.reason)    for k, v in f.getheaders():        print('%s: %s' % (k, v))    print('Data:', f.read().decode('utf-8'))

登录后复制

这样豆瓣会返回适合iPhone的移动版网页:

一篇文章带你搞定Python中urllib库(操作URL)

三、Post()

一篇文章带你搞定Python中urllib库(操作URL)

如果要以POST发送一个请求,只需要把参数data以bytes形式传入。

模拟一个微博登录,先读取登录的邮箱和口令,然后按照weibo.cn的登录页的格式以username=xxx&password=xxx的编码传入:

一篇文章带你搞定Python中urllib库(操作URL)

from urllib import request, parseprint('Login to weibo.cn...')#电子邮件email = input('Email: ')#密码passwd = input('Password: ')#相关的参数login_data = parse.urlencode([    ('username', email),    ('password', passwd),    ('entry', 'mweibo'),    ('client_id', ''),    ('savestate', '1'),    ('ec', ''),    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')])#网址请求req = request.Request('https://passport.weibo.cn/sso/login')req.add_header('Origin', 'https://passport.weibo.cn')#构造User-Agentreq.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')with request.urlopen(req, data=login_data.encode('utf-8')) as f:    print('Status:', f.status, f.reason)    for k, v in f.getheaders():        print('%s: %s' % (k, v))    print('Data:', f.read().decode('utf-8'))

登录后复制

如果登录成功,获得的响应如下:

一篇文章带你搞定Python中urllib库(操作URL)

如果登录失败,获得的响应如下:

一篇文章带你搞定Python中urllib库(操作URL)

四、Handler

如果还需要更复杂的控制,比如通过一个Proxy去访问网站,需要利用ProxyHandler来处理,示例代码如下:

import urllib.request# 构建了两个代理Handler,一个有代理IP,一个没有代理IPhttpproxy_handler = urllib.request.ProxyHandler({"https": "27.191.234.69:9999"})nullproxy_handler = urllib.request.ProxyHandler({})# 定义一个代理开关proxySwitch = True # 通过 urllib.request.build_opener()方法使用这些代理Handler对象,创建自定义opener对象# 根据代理开关是否打开,使用不同的代理模式if proxySwitch:    opener = urllib.request.build_opener(httpproxy_handler)else:    opener = urllib.request.build_opener(nullproxy_handler)request = urllib.request.Request("http://www.baidu.com/") # 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。response = opener.open(request)# 2. 如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。# urllib.request.install_opener(opener)# response = urllib.request.urlopen(request)# 获取服务器响应内容html = response.read().decode("utf-8")  # 打印结果print(html)

登录后复制

如果代理成功返回网址的信息。

一篇文章带你搞定Python中urllib库(操作URL)

如果网址出错或者代理地址有误,返回下面界面。

一篇文章带你搞定Python中urllib库(操作URL)

五、总结

        使用Python语言,能够帮助大家更好的学习Python。urllib提供的功能就是利用程序去执行各种HTTP请求。如果要模拟浏览器完成特定功能,需要把请求伪装成浏览器。伪装的方法是先监控浏j览器发出的请求,再根据浏览器的请求头来伪装,User-Agent头就是用来标识浏览器的。

以上就是一篇文章带你搞定Python中urllib库(操作URL)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2230529.html

(0)
上一篇 2025年2月26日 14:23:39
下一篇 2025年2月26日 14:23:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HashMap的工作原理是什么?它是如何实现快速查找的?

    hashmap的工作原理包括:1.哈希函数计算键的哈希值;2.通过位运算计算索引;3.使用链表或红黑树处理哈希冲突;4.查找操作通过哈希值和索引进行。hashmap在java中实现高效的键值对存储和查找,平均时间复杂度为o(1),适用于大数…

    2025年5月3日
    000
  • 如何在Java中将集合转换为数组,反之又如何操作?

    在java中,将集合转换为数组使用集合的toarray()方法,将数组转换为集合使用arrays.aslist()方法。1) 使用集合的toarray()方法可以将集合转换为数组,有无参和带参两种版本。2) 使用arrays.aslist(…

    2025年5月3日
    000
  • 正则查找特定的字符串有哪些

    要查找特定字符串,正则表达式提供以下方法:基本模式:/特定字符串/字符组:/[字符组]/通配符:. * ?锚点:^ $转义字符:\ 正则表达式查找特定字符串 正则表达式(Regex)是一种用于查找、匹配、替换和验证文本模式的强大工具。要查找…

    2025年5月3日
    000
  • 正则匹配换行符并替换

    要匹配换行符,可以使用正则表达式:\r\n:匹配 Windows 中的换行符\n:匹配 Linux 和 macOS 中的换行符\r|\n:匹配所有类型的换行符将匹配到的换行符替换为空白、一个空格或制表符,可以使用相应的替换模式:&#8221…

    2025年5月3日
    000
  • python一键生成代码2024最新

    Python 一键生成代码工具是一种软件,允许开发人员通过简单的界面生成 Python 代码,从而提高生产力、减少错误、促进代码重用和提供一致性。2024 年的趋势包括人工智能集成、云集成和更广泛的使用。 Python 一键生成代码:202…

    2025年5月3日
    000
  • java怎么给list转数组

    在 Java 中将 List 转换为数组有两种方法:1. 使用 toArray() 方法,将 List 中的所有元素复制到一个给定类型的新数组中;2. 使用 Stream API,将 List 元素转换为基本类型(如果可能),然后使用 to…

    2025年5月3日
    000
  • java 对象数组怎么修改值

    修改 Java 对象数组值的方法有:直接赋值、使用 get/set 方法、使用 Arrays.fill()、使用 System.arraycopy() 和使用迭代器。 修改 Java 对象数组中的值 直接赋值 修改对象数组中元素值最常见的方…

    2025年5月3日
    000
  • java入门python对比

    Python因其易学、多用途而更适合初学者,而 Java 适用于企业开发;就业市场上,Java 在企业开发中更普遍,Python 在数据科学和机器学习中的需求更高;社区支持方面,Java 社区活跃度高,提供广泛资源,而 Python 社区专…

    2025年5月3日
    000
  • 入门选择java还是python

    对于初学者,Python 通常是编程的更佳选择。其简单易学的语法、快速反馈和丰富的库使其成为入门编程的绝佳选择。尽管如此,Java 由于其强类型系统、高性能和广泛应用,仍然是更高级程序员的有力选择。最终选择取决于个人需求和偏好。 初学者选择…

    2025年5月3日
    000
  • ARM架构下Docker运行HBase失败:如何解决HBase启动及环境配置问题?

    在 ARM 架构服务器上运行 HBase 2.4.17 Docker 镜像并非易事,本文将分析常见问题并提供解决方案。 用户尝试在 ARM 架构设备上使用 Docker 运行 HBase 时,遇到了启动失败的问题。 最初,用户基于 Debi…

    2025年5月3日
    000

发表回复

登录后才能评论