一、get请求的quote方法【使用urllib.parse库】---> 一般解决单个参数
quote:将汉字转化为unicode编码
1.导入urllib.parse库
import urllib.parse
2.将汉字转化为unicode编码
import urllib.parse
name = urllib.parse.quote('唯念欢')
print(name)
# %E5%94%AF%E5%BF%B5%E6%AC%A2
二、get请求的urlencode方法【urllib.parse库】 ---> 一般解决多个参数
import urllib.parse
data = {
'name': '唯念欢',
'sex': '男',
'location': '中国湖北省'
}
name = urllib.parse.urlencode(data)
print(name)
# name=%E5%94%AF%E5%BF%B5%E6%AC%A2&sex=%E7%94%B7&location=%E4%B8%AD%E5%9B%BD%E6%B9%96%E5%8C%97%E7%9C%81
三、爬取李白简介源码
import urllib.request
import urllib.parse
base_url = 'https://www.baidu.com/s?'
data = {
'wd': '李白',
'sex': '男',
'location': '中国四川省绵阳'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67'
}
new_url = urllib.parse.urlencode(data)
url = base_url + new_url
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)
在爬取第一遍时非常顺利的就将原码爬取下来了,但是第二遍就遭到了百度的反爬,我猜想大概是cookie没有写进headers中吧,在以后学习到这个部分我再回过来将这个代码完善一下。