欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬虫get请求与post请求处理

程序员文章站 2024-01-19 11:33:16
...

1、Get请求

get请求就是在url后面以拼接方式传参,但是如果参数是中文时需要转码处理,否则会报错。
比如我们访问豆瓣的官网,然后在搜索框中输入“电影”关键字,可以看到浏览器中的请求为https://www.douban.com/search?q=电影
爬虫get请求与post请求处理
如果我们直接模拟上面的url请求,则会报如下错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128),原因是使用浏览器访问时,它会自动帮我们进行参数转码处理,而现在我们用代码访问,所以需要自己处理。

from urllib.request import urlopen
from urllib.request import Request
from random import choice

# 1.爬取站点访问地址
url = "https://www.douban.com/search?q=电影"
# 2.模拟多个浏览器的User-Agent(分别为Chrome、Firefox、Edge)
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.随机设置请求头信息
headers = {
    "User-Agent": choice(user_agents)
}
# 4.将请求头信息封装到Request对象中
req = Request(url, headers=headers)
# 5.发送请求并打印返回值
print(urlopen(req).read().decode())

修改,引入urlencode函数对url进行参数转码就可以正常访问了

省略..
from urllib.parse import urlencode

# 1.爬取站点访问地址
args = {'q': '电影'}
url = "https://www.douban.com/search?{}".format(urlencode(args))
省略...

2、Post请求

post请求是通过Request对象中的data属性来传参,我们这里模拟一个登录请求

from urllib.request import urlopen
from urllib.request import Request
from random import choice
from urllib.parse import urlencode

# 1.url与参数处理
url = "https://www.douban.com/"
args = {
    'name': 'abcdef123456',
    'password': '123456'
}
# 2.模拟多个浏览器的User-Agent(分别为Chrome、Firefox、Edge)
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.随机设置请求头信息
headers = {
    "User-Agent": choice(user_agents)
}
# 4.将请求头信息封装到Request对象中
req = Request(url, headers=headers, data=urlencode(args).encode())
# 5.发送请求并打印返回值
print(urlopen(req).read().decode())

如果不加encode()函数会报TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.错误

相关标签: # 爬虫 python