urllib_get请求的urlencode的方法(05)

# urlencode应用场景:多个参数的时候

# https://www.baidu.com/s?wd=周杰伦&sex=男

# import urllib.parse
# data = {
#     'wd':'周杰伦',
#     'sex':'男',
# }
#
# a = urllib.parse.urlencode(data)
#
# print(a)


# 获取https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7的网页源码

import urllib.request
import urllib.parse


base_url = 'https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7&localtion=%E4%B8%AD%E5%9B%BD%E5%8F%B0%E6%B9%BE%E7%9C%81'


headers = {

        #'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        # 'Accept-Encoding': 'gzip, deflate, br, utf-8',
        #'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,ar;q=0.5',
        #'Cache-Control': 'max-age=0',
        #'Connection': 'keep-alive',
        'Cookie':'BIDUPSID=0B56D4240CE10054D580E87426E4BC21; PSTM=1709189838; BAIDUID=7F910C31350973D80053F08F4D940583:FG=1; H_WISE_SIDS=60237_60273_60327_60336; H_WISE_SIDS_BFESS=60237_60273_60327_60336; BDUSS=nAwcXhDRXZISkRpS3lRbnFGOERnYjltNVc4aHpnNjBkQ3M1SUpPUm1INHdjZ2huRVFBQUFBJCQAAAAAAAAAAAEAAABtmLlcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDl4GYw5eBmN; BDUSS_BFESS=nAwcXhDRXZISkRpS3lRbnFGOERnYjltNVc4aHpnNjBkQ3M1SUpPUm1INHdjZ2huRVFBQUFBJCQAAAAAAAAAAAEAAABtmLlcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDl4GYw5eBmN; MCITY=-214%3A; BD_UPN=12314753; H_PS_PSSID=60273_60853_60886_60875_60898; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=7F910C31350973D80053F08F4D940583:FG=1; B64_BOT=1; RT="z=1&dm=baidu.com&si=357ff16f-8f88-40da-a603-13963079ed7c&ss=m2heo1nr&sl=4&tt=3s8&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&r=cey5vtq&ul=649d&hd=64i9"; ZD_ENTRY=bing; ab_sr=1.0.1_Yjg1NThkOTU2ODA3YjBiYjBhY2ZlOWVkMGFjZDExYTEyY2FjYzllNzM5MjAyM2U4NWZmNWZmZGNmYmMyYWNhZjZkOGQ5NzljNjdlYTA3OTg3ZTkwNzYxYzE0ZjgyMTQ3YTY1ZjE2ZjQ2MGRhOGEzMGY3NTJjZDE1NDM5OTc2YjcwMDlhYjJlN2IwMDY5Y2E3YmEzNjg2MmFlZjM3MDEzOWZmNDZiZTRiMjg5Yzk5ZjJhMWQxNTc4YjljMGRiMmU2; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_645EC=e7f6rj9kbJpggQiBTCqlwH8%2BR%2BkPk%2FU8qWgAZB6SJwDGkDy5RDx8Q9iQYIg; BA_HECTOR=2ga0800hag2k2l2h000ha1a1araod61jh9p741v; ZFY=oCD7Di5sJxOWCfX9rwp4QUQB52eBhP5VUSLyOukGY:Ao:C; baikeVisitId=9f3f5c44-486a-4b32-8731-5f80bbc4ae7d',
        #'Host': 'www.baidu.com' ,
        #'Sec-Fetch-Dest': 'document' ,
        #'Sec-Fetch-Mode': 'navigate',
        #'Sec-Fetch-Site': 'none',
        #'Sec-Fetch-User': '?1',
        #'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36 Edg/122.0.0.0',
        #'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        #'sec-ch-ua-mobile': '?1',
        #'sec-ch-ua-platform': '"Android"'
}

request = urllib.request.Request(url=base_url, headers=headers)

response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

print(content)

如果爬取网页的话,出现了百度安全认证,需要在User-Agent的基础下加上Cookie,这个同样也能在浏览器的检查里的network能够找到

<think>根据用户的问题,他们想知道如何使用Pythonurllib.request模块发送GET请求。用户提供了多个站内引用,其中引用[1]、[3]、[4]和[5]直接涉及urllib.request的使用。特别是引用[3]提供了一个发送GET请求到百度的示例。我将参考这些引用来构建一个清晰的步骤指南,包括如何发送GET请求、处理响应以及可能的异常处理。由于用户特别要求发送GET请求,我会集中在GET方法上,虽然引用中也提到了POST,但这里不需要涉及。另外,根据引用[1],正确的导入方式很重要,避免常见的导入错误。引用[3]展示了使用urlopen直接发送请求,而引用[4]则展示了使用Request对象构建请求。因此,我会介绍两种方法:简单使用urlopen和更灵活的Request方法。此外,引用[5]提到urljoin用于处理URL,这可能在构建完整URL时有用,但用户的问题主要集中在发送请求上,所以可能不会深入,但会在示例中简单提及。最后,我会按照系统指令使用正确的Markdown和LaTeX格式,并生成相关问题。</think> 以下是使用 Python `urllib.request` 模块发送 GET 请求的详细步骤和完整示例,结合引用内容整理: ### 一、基础 GET 请求方法 #### 方法 1:直接使用 `urlopen()`(简单场景) ```python import urllib.request # 目标 URL url = &#39;https://www.baidu.com&#39; try: # 发送 GET 请求并获取响应对象 response = urllib.request.urlopen(url) # [^3] # 读取响应内容(字节流需解码) html_content = response.read().decode(&#39;utf-8&#39;) # [^3] print(html_content) # 获取状态码 status_code = response.getcode() print(f"状态码: {status_code}") # [^3] except Exception as e: print(f"请求异常: {e}") ``` #### 方法 2:使用 `Request` 对象(需添加请求头) ```python from urllib.request import Request, urlopen # [^1] url = &#39;http://example.com&#39; headers = { &#39;User-Agent&#39;: &#39;Mozilla/5.0&#39;, # [^1] &#39;Accept&#39;: &#39;text/html&#39; } # 创建 Request 对象(自动转为 GET 请求) request = Request(url, headers=headers) # [^1] # 发送请求并处理响应 response = urlopen(request) data = response.read().decode(&#39;utf-8&#39;) print(data) ``` ### 二、关键参数说明 | 参数 | 说明 | |---------------|----------------------------------------------------------------------| | `url` | 目标地址,可通过 `urllib.parse.urljoin()` 处理相对路径 [^5] | | `headers` | 请求头字典,常见需设置 `User-Agent` 防止反爬 [^1] | | `data` | **GET 请求中通常不设置**(设置后会变成 POST)[^4] | | `timeout` | 超时时间(秒),例:`urlopen(url, timeout=10)` | ### 三、进阶功能示例 #### 1. 处理 URL 参数 ```python from urllib.parse import urlencode params = {&#39;q&#39;: &#39;python&#39;, &#39;page&#39;: 1} encoded_params = urlencode(params) # 生成 q=python&page=1 full_url = f"https://search.com?{encoded_params}" # [^5] response = urllib.request.urlopen(full_url) ``` #### 2. 异常处理 ```python from urllib.error import HTTPError, URLError try: response = urllib.request.urlopen("https://invalid.url", timeout=5) except HTTPError as e: print(f"HTTP错误 {e.code}: {e.reason}") except URLError as e: print(f"URL错误: {e.reason}") except TimeoutError: print("请求超时") ``` ### 四、与 `requests` 库对比 | 特性 | `urllib.request` | `requests` | |--------------------|--------------------------------------|--------------------------| | 安装要求 | Python 内置 | 需 `pip install requests`| | 请求头设置 | 需手动创建 `Request` 对象 [^1] | 直接支持 `headers` 参数 | | JSON 处理 | 需手动解析 | 内置 `.json()` 方法 [^2] | | 代码简洁度 | 较冗长 | 更简洁 [^2] | > **推荐选择**: > - 快速开发/复杂需求:用 `requests` [^2] > - 轻量级需求/避免依赖:用 `urllib.request`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值