• 打卡第 2 天: urllib简记


    目录

    一、urllib

    1.1、urlopen

    1.2、get请求参数的编码

    1.3、post请求

    1.6、多个user——agent随机使用

    1.5、proxyHandler代理使用


    活动地址:CSDN21天学习挑战赛

    一、urllib

    urllib库是python内置的HTTP请求库,它包含如下4个模块:

    • request :请求模块
    • parse : 一个工具模块,提供许多URL的处理方法
    • error :异常处理模块
    • robotparser : 主要用于识别网站的robots.txt文件,一般不用

    1.1、urlopen

    模拟浏览器向服务器发送请求: urlopen()其参数可以是字符串也可以是一个Request object

    1. import urllib.request
    2. url = 'https://www.baidu.com'
    3. res = urllib.request.urlopen(url=url)
    4. print(type(res)) # HTTPResponse

    这里可以看到响应的是一个:HTTPResponse类型的对象,而他主要有如下属性与方法。

    属性:

    1. # HTTPResponse 属性
    2. print(res.status) # 状态码
    3. print(res.reason) # 状态信息
    4. print(res.msg) # 访问成功返回 ok
    5. print(res.version) # HTTP版本信息 11 => 1.1
    6. print(res.debuglevel) # 调试等级

    方法:

    1. # HTTPResponse 方法
    2. '''
    3. read(): 获取响应体内容,bytes类型,但只能使用一次
    4. getheaders(): 获取响应头信息,返回列表元组
    5. getheader(key): 返回指定键的响应头信息
    6. getcode(): 返回响应的HTTP状态码
    7. geturl(): 返回检索的URL
    8. readinto(): 返回网页头信息
    9. fileno(): 返回文件描述信息
    10. '''
    11. print(res.getheaders())
    12. print(res.getheader('Server'))
    13. print(res.getcode())
    14. print(res.geturl())
    15. print(res.readinto())
    16. print(res.fileno())

    1.2、get请求参数的编码

    例子

    • get请求:在url中参数如果有中文,则需要我们转码
    • urllib.parse.quote() ==> parse.quote('周杰伦')
    • urllib.parse.urlencode() ==> args = parse.urlencode({'wd': '周杰伦', 'ie': 'utf-8'}) 以字典传参
    1. """
    2. 2022年
    3. CSDN:抄代码抄错的小牛马
    4. """
    5. from random import choice
    6. from urllib import request
    7. from urllib import parse
    8. # get请求:在url中参数如果有中文,则需要我们转码
    9. # urllib.parse.quote() ==> parse.quote('周杰伦')
    10. # urllib.parse.urlencode() ==> args = parse.urlencode({'wd': '周杰伦', 'ie': 'utf-8'}) 以字典传参
    11. user_agents = [
    12. 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
    13. 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    14. 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    15. ]
    16. headers = {
    17. 'User-Agent': choice(user_agents)
    18. }
    19. # args = parse.quote('周杰伦')
    20. # url = f'https://www.baidu.com/s?&wd={args}'
    21. # args = {
    22. # 'wd': '周杰伦',
    23. # 'ie': 'utf-8',
    24. # }
    25. args = parse.urlencode({'wd': '周杰伦', 'ie': 'utf-8'})
    26. url = f'https://www.baidu.com/s?&wd={args}'
    27. req = request.Request(url=url, headers=headers)
    28. res = request.urlopen(req).read().decode('utf-8')
    29. print(res)

    1.3、post请求

    1. """
    2. 2022年
    3. CSDN:抄代码抄错的小牛马
    4. """
    5. import urllib.request
    6. import urllib.parse
    7. from random import choice
    8. user_agents = [
    9. 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
    10. 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    11. 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    12. ]
    13. headers = {
    14. 'User-Agent': choice(user_agents)
    15. }
    16. url = 'https://www.baidu.com'
    17. args = {
    18. 'user': '123456789',
    19. 'password': '1111111'
    20. }
    21. data = urllib.parse.urlencode(args).encode() # post请求时,data要编码 ,要求为 bytes 数据类型
    22. req = urllib.request.Request(url=url, data=data, headers=headers)
    23. res = urllib.request.urlopen(req).read().decode('utf-8')
    24. print(res)

    1.6、多个user——agent随机使用

    • 直接导入包
      from fake_useragent import UserAgent
    • random 中的 choice
    1. """
    2. 2022年
    3. CSDN:抄代码抄错的小牛马
    4. """
    5. from urllib import request
    6. from random import choice
    7. # 或者是直接导入包
    8. from fake_useragent import UserAgent
    9. #
    10. # # 随机chrome浏览器
    11. # print(UserAgent().ie)
    12. # # 随机firefox浏览器
    13. # print(UserAgent().firefox)
    14. # # 随机请求头
    15. # print(UserAgent().random)
    16. # url = 'https://baidu.com/'
    17. url = 'http://httpbin.org/get'
    18. user_agents = [
    19. 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
    20. 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    21. 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Mobile Safari/537.36',
    22. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
    23. 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    24. ]
    25. headers = {
    26. 'User-Agent': choice(user_agents)
    27. }
    28. # req = request.Request(url=url, headers=headers)
    29. # res = request.urlopen(req).read().decode('utf-8')
    30. print(headers)

    1.5、proxyHandler代理使用

    1. """
    2. 2022年
    3. CSDN:抄代码抄错的小牛马
    4. """
    5. import urllib.request
    6. from urllib.request import ProxyHandler
    7. from urllib.request import build_opener
    8. from fake_useragent import UserAgent
    9. url = 'https://www.baidu.com/'
    10. headers = {'User-Agent': UserAgent().chrome}
    11. request = urllib.request.Request(url=url, headers=headers)
    12. proxy = {
    13. # 'type': 'ip:port' ==> 类型:IP:端口
    14. 'http': '202.55.5.209:8090'
    15. # 'type': 'name:password@ip:port' ==> 独享IP 会有一个账号
    16. }
    17. handler = ProxyHandler(proxy)
    18. opener = build_opener(handler)
    19. response = opener.open(request)
    20. content = response.read().decode()
    21. print(content)

    拜~~~ 

  • 相关阅读:
    web前端网页设计期末课程大作业:旅游网页主题网站设计——三亚旅游网页设计(6个页面) HTML+CSS+JavaScript
    数据结构 - 顺序表
    初识JavaScript
    python如何利用算法解决业务上的【分单问题】
    坚守,一个烂俗的词,驱动人生带它走过了15年
    详解八大排序
    Java-泛型
    【Linux】进程间通信2-匿名管道2
    openjudge 1.5.22 津津的储蓄计划
    第二次提交PR啦
  • 原文地址:https://blog.csdn.net/qq_61122628/article/details/126128395