《python爬虫入门教程05--重剑无峰168》

《python爬虫入门教程–重剑无峰168》

《python爬虫入门教程05--重剑无峰168》


前言

如下方所示:书接上回,这次咋们要在url哪里输入多个中文,精准定位周杰伦

# urlencode应用场景:需要解码多个参数的时候
# https://www.baidu.com/s?wd=周杰伦&sex=男

# import urllib.parse
#
# data ={
#     'wd':'周杰伦',
#     'sex':'男'
# }

一、urllib.parse.urlencode()函数的介绍?

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)

1.query:这是需要被编码的数据,可以是字典或者是一个包含两个元素的元组的序列(比如列表或元组)。每个元组的第一个元素是键,第二个元素是值。如果doseq参数为True,那么值如果是序列类型(比如列表或元组),它们会被编码成多个键值对。

2.doseq:默认为False。如果设置为True,那么对于字典中的值,如果它们是序列类型(比如列表或元组),则每个序列元素会被编码成一个单独的键值对。这对于处理表单数据中的复选框等非常有用。

3.safe:一个字符串,指定哪些字符不需要被编码。默认情况下,所有的非字母数字字符都会被编码。

4.safe:encoding 和 errors:用于指定编码方式和处理编码错误的策略。

二、判断url用的是get请求还是post以及如何书写代码 – > urllib

1.如何判断是那种方法呢,一样的浏览器 —> F12 --> headers

在这里插入图片描述

2.用urllib库get方法获取周杰伦信息(url有多条中文信息需要解码,上方已经讲解)

代码如下(示例):


# 获取网页源代码 https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7&location=%E5%8F%B0%E6%B9%BE%E7%9C%81
import urllib.request
import urllib.parse

base_url = 'https://www.baidu.com/s?'
data ={
    'wd':'周杰伦',
    'sex':'男',
    'location': '中国台湾省'
}
# get()--方法无需编码,post在这有区别
new_data = urllib.parse.urlencode(data)

# 请求资源路径
url = base_url + new_data

# 给一个UA,因为https有UA反扒机制
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
}

# 请求对象定制
request = urllib.request.Request(url=url, headers=headers)

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

# 获取响应的内容
content = response.read().decode('utf-8')

# 打印数据
print(content)

3.用urllib库post方法获取百度翻译网站spider单词的意思

import urllib.request
import urllib.parse
import json

# post请求
url = 'https://fanyi.baidu.com/sug'

# 请求代理
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
}

data = {
    'kw': 'spider'
}

# 1.这里和get不一样,post请求的参数一定要进行编码
data = urllib.parse.urlencode(data).encode('utf-8')

# 2.post的请求参数是不会放在url后面,而是放在请求对象定制的参数中
request = urllib.request.Request(url=url, data=data, headers=headers)

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

# 获取响应数据
content = response.read().decode('utf-8')

# str类型 --> 转换为json类型
# print(content)

post_data = json.loads(content)
print(post_data)

总结

1.多个中文数据要输入url时,如何转换。用urllib.parse.urlencode()函数。

2.区分get和post请求在urllib库中的区别。

3.可以关注我,这些帖子是有上下关系的,后续继续更新,过几个帖子之后应该就要上案例了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值