Python爬虫:基础操作01(urllib工具 / requests工具 / 网页数据传输)
文章目录
写在前面
使用目的:模块化程序,用于新手快速上手
声明:请勿用于非法操作
程序片段及功能
1.urllib工具使用方法
1.网页访问:请求网页访问,得到网页数据信息
import urllib
from urllib import request
url = r"http://www.XXXX.com/"
# 网页访问方法1:直接访问,得到网页源码,解码---(编码encode())
reponse = request.urlopen(url).read().decode(encoding='utf-8')
# 网页访问方法2:构建HTTP处理器对象(专门处理HTTP请求的对象)
http_hander = request.HTTPHandler()
opener = request.build_opener(http_hander) # 创建自定义opener
req = request.Request(url) # 创建自定义请求对象
reponse = opener.open(req).read().decode() # 发送请求,获取响应
# 网页访问方法2.1:把自定义opener设置为全局,这样用urlopen发送的请求也会使用自定义的opener;
http_hander = request.HTTPHandler()
opener = request.build_opener(http_hander) # 创建自定义opener
req = request.Request(url) # 创建自定义请求对象
request.install_opener(opener)
reponse = request.urlopen(req).read()
1.反爬机制:伪装浏览器,构造浏览器识别的信息绕过检测机制(只有初级功能,高级的或者验证码类型的就不得行了
)
import urllib
from urllib import request
url = r"http://www.XXXX.com/"
# 反爬机制1:判断用户是否是浏览器访问,可以通过伪装浏览器请求访问
req = request.Request(url)
reponse = request.urlopen(req).read().decode()
# 反爬机制2:构造请求头信息(可构建多个请求头,随机使用进行访问)
header = {"User-Agent": "Mozilla/4.0 compatible; MSIE 5.5; Windows NT 5.0"}
req = request.Request(url, headers=header)
reponse = request.urlopen(req).read().decode() # 解码---(编码encode())
# 反爬机制3:判断请求来源的ip地址,可以使用代理IP
proxy = ["http": "182.111.64.7:41766"]
proxyHandler = request.ProxyHandler(proxy) # 构建代理处理器对象
opener = request.build_opener(proxyHandler) # 创建自定义opener
req = request.Request(url) # 创建请求对象
res = opener.open(req)
1.处理get请求:对需要提交信息才能反馈网页信息的网站进行访问,并取得其网页代码
import urllib
from urllib import request
url = r"http://www.XXXX.com/"
# 方法1
formdata = {"i": key}
data = urllib.parse.urlencode(formdata).encode(encoding='utf-8')
req = request.Request(url, data=data, headers=header)
resp = request.urlopen(req).read().decode()
# 方法2:
wd={"wd":"XX"}
#构造url编码
wdd=urllib.parse.urlencode(wd)
url=url+wdd
req=request.Request(url)
reponse=request.urlopen(req).read().decode()
2.requests工具使用方法
1.网页访问:请求网页访问,得到网页数据信息
import requests
url = r"http://www.XXXX.com/"
# 两种方法等效
response = requests.get(url).content.decode()
response = requests.request("get", url).content.decode()
print(response)
2.get网页访问:请求网页访问,得到网页数据信息
import requests
url = r"http://www.XXXX.com/"
headers = {"User-Agent": "Mozilla/4.0 compatible; MSIE 5.5; Windows NT 5.0"}
wd = {"wd": "XX"}
response = requests.get(url, params=wd, headers=headers)
data = response.text # 返回一个字符串形式的数据
data2 = response.content # 返回一个二进制形式的数据
3.post网页访问:请求网页访问,得到网页数据信息
import requests
url = r"http://www.XXXX.com/"
# 构造请求头信息
header = {"User-Agent": "Mozilla/4.0 compatible; MSIE 5.5; Windows NT 5.0"}
key = "XX"
# post请求需要提交的参数
formdata = {
"i": key,
"from": "AUTO",
"to": "AUTO",
}
response = requests.post(url, headers=header, data=formdata)
- 关于三者的区别见链接
3. 网页数据传输
1.网页读取:将某网页的内容读取至文件夹中,并命名保存
from urllib.request import urlopen
url = r"http://www.XXXX.com/"
resp = urlopen(url)
with open("文件.html", mode="w", encoding="utf-8") as f:
f.write(resp.read().decode("utf-8")) # 读取到网页的页面源代码
print("over!")
2.网页请求:请求网页允许访问,并读取其网页信息
import requests
query = input("输入一个你喜欢的明星")
url = f'https://www.xxxxxx.com/web?query={query}'
dic = {"User-Agent": "你的浏览器信息"}
resp = requests.get(url, headers=dic)
print(resp.text)
3.网页单项交互:向网页发送信息,并取得单项回应
import requests
url = "https://xxxxxx.com/"
s = input("请输入你要翻译的英文单词")
dat = {"kw": s}
resp = requests.post(url, data=dat) # 发送post请求, 发送的数据必须放在字典中, 通过data参数进行传递
print(resp.json()) # 将服务器返回的内容直接处理成json() => dict
4.网页多项交互:向网页发送信息,并取得多项数据回应
import requests
url = "https://.xxxxxx.com/"
# 重新封装参数
limit_ = {
"type": "24",
"interval_id": "100:90",
"action": "",
"start": 1,
"limit": 20,
}
param = limit_
headers = {"User-Agent": "你的浏览器信息"}
resp = requests.get(url=url, params=param, headers=headers)
print(resp.json())
resp.close() # 关掉resp
代码附件
- Python爬虫:基础操作01-1:构造多条请求头函数,随机请求网页信息
- Python爬虫:基础操作01-2:多网页信息下载保存
- Python爬虫:基础操作01-3:使用session实现登陆账号,获取网页信息
- Python爬虫:基础操作01-4:得到网页多个音频资源,并下载保存
- Python爬虫:基础操作01-5:得到网页资源
参考网站名称
Python爬虫——Requests 的Get和Post请求
2021年最新Python爬虫教程