urllib 并不是python爬虫的首选模块!!使用流程食用即可
使用流程
# 需求:爬去搜狗页面https://www.sogou.com/
import urllib.request
# 指定url
url = 'https://www.sogou.com/'
# 指定url发起请求,返回响应对象
response = urllib.request.urlopen(url=url)
# 获取数据: read出数据
data = response.read()
# 进行持久化存储
with open('./sougou.html', 'wb') as f:
f.write(data)
转码
url不能有非ASCII编码字符数据(中文)
解决方法:urllib.parse
'''如果含有中文就必须做转码'''
word = urllib.parse.quote('中文必须这样')
url = 'https://www.sogou.com/web?query='
url += word
response = urllib.request.urlopen(url=url)
反爬
伪装UA
import urllib.request
url = 'https://www.baidu.com/'
headers = {
# 定制请求头
'User-Agent': '.....',
}
'''自定义请求,返回请求对象request'''
request = urllib.request.Request(url=url, headers=headers)
'''访问页面'''
response = urllib.request.urlopen(request)
data = response.read()
print(data)
报错
'''因为没有设置ssl所以,点进request源码'''
import ssl
context = ssl._create_unverified_context()
POST请求
爬取百度翻译
import urllib.request
import urllib.parse
# 指定url
url = 'https://fanyi.baidu.com/sug'
'''post请求携带的参数进行处理'''
# 1. 将post封装
data = {
'kw': '西瓜',
}
# 2. 编码处理 返回字符串
data = urllib.parse.urlencode(data)
# 3. 将字符串转成 byte类型
data = data.encode()
# 请求 data : post的参数
response = urllib.request.urlopen(url=url, data=data)
print(response.read())