《python爬虫入门教程–重剑无峰168》
《python爬虫入门教程05--重剑无峰168》
- 《python爬虫入门教程--重剑无峰168》
- 前言
- 一、urllib.parse.urlencode()函数的介绍?
- 1.query:这是需要被编码的数据,可以是字典或者是一个包含两个元素的元组的序列(比如列表或元组)。每个元组的第一个元素是键,第二个元素是值。如果doseq参数为True,那么值如果是序列类型(比如列表或元组),它们会被编码成多个键值对。
- 2.doseq:默认为False。如果设置为True,那么对于字典中的值,如果它们是序列类型(比如列表或元组),则每个序列元素会被编码成一个单独的键值对。这对于处理表单数据中的复选框等非常有用。
- 3.safe:一个字符串,指定哪些字符不需要被编码。默认情况下,所有的非字母数字字符都会被编码。
- 4.safe:encoding 和 errors:用于指定编码方式和处理编码错误的策略。
- 二、判断url用的是get请求还是post以及如何书写代码 -- > urllib
- 总结
前言
如下方所示:书接上回,这次咋们要在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)