百度收录自适应网站,邯郸开发网站有哪些,wordpress istyle2,手机端关键词排名免费软件文章目录 一、urllib简介二、请求的发送和响应#xff08;一#xff09;发送请求#xff08;二#xff09;获取相应内容#xff08;三#xff09;下载所需文件 三、URL请求对象的定制四、常见请求方式#xff08;一#xff09;get请求方式#xff08;二#xff09;po… 文章目录 一、urllib简介二、请求的发送和响应一发送请求二获取相应内容三下载所需文件 三、URL请求对象的定制四、常见请求方式一get请求方式二post请求方式 五、代理IP的使用 一、urllib简介
urllib是Python自带的标准库通常用于爬虫开发、API数据获取和测试是一个收集了多个涉及 URL 的模块的包
包作用urllib.request打开和读取 URLurllib.error包含 urllib.request 抛出的异常urllib.parse用于解析 URLurllib.robotparser用于解析 robots.txt 文件 二、请求的发送和响应
一发送请求
urllib.request.urlopen(url, dataNone, [timeout, ]*, cafileNone, capathNone, cadefaultFalse, contextNone)
参数说明url需要访问的网站的URL地址data用于给出要发送到服务器的附加数据若不需要发送数据则为 Nonetimeout用于指定阻塞操作的超时时间单位为秒未指定将使用全局默认超时参数cafile、capsth用于为 HTTPS 请求指定一组受信 CA 证书cadefault将被忽略context用于描述各种SSL选项的实例
二获取相应内容
当对网站发送请求时网站会返回相应的响应内容对于使用urlopen得到的http.client.HTTPResponse类型的数据主要有以下几种方法函数
方法函数说明read()按字节进行读取可以指定读取多少字节readline()按行进行读取读取一行readlines()按行进行读取读取所有行geturl()返回请求的URLgetheaders返回请求链接的状态信息getcode返回HTTP状态码
import urllib.request# 指定url
url http://www.baidu.com# 打开url
response urllib.request.urlopen(url)# 读取返回的内容
content response.read().decode(utf-8)# 写入txt
with open(baidu.txt, w, encodingutf-8) as f:f.write(content)三下载所需文件
对于不同内容可以使用urlretrieve下载得到相应的文件。
urlretrieve(url, filenameNone, reporthookNone, dataNone):
参数说明url下载链接地址filename指定保存本地路径reporthook回调函数data指post到服务器的数据
import urllib.request# 下载百度网页
url_page http://www.baidu.com
urllib.request.urlretrieve(url_page, baidu.html)# 下载csdn图标
url_img https://img-home.csdnimg.cn/images/20201124032511.png
urllib.request.urlretrieve(url_img, csdn.png)# 下载生日快乐歌
url_video https://vd4.bdstatic.com/mda-id9czn5517wu43qj/sc/mda-id9czn5517wu43qj.mp4
urllib.request.urlretrieve(url_video, birthday.mp4)三、URL请求对象的定制
将对网页的请求封装到对象当中同时设置相关的参数例如可以应对常见的UA反爬根据反爬手段的强弱可以在请求头中放入更多信息。
import urllib.request# 指定请求对象的相关参数
url https://www.baidu.com
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
}# 定制请求对象
request urllib.request.Request(urlurl, headersheaders)# 向请求对象发出请求
response urllib.request.urlopen(request)# 转换为utf-8编码打印出来
content response.read().decode(utf-8)
print(content)四、常见请求方式
get请求是从指定的资源请求数据用于获取数据请求的内容会作为url的一部分请求的资源会得到缓存。
post请求是向指定的资源提交要被处理的数据用于将数据发送给服务器请求的内容数据量更大不会作为url的一部分不会被缓存。
一get请求方式
import urllib.request
import urllib.parse# 指定基本url和请求查询参数
base_url https://www.baidu.com/s?
data {wd:csdn,tag:社区,address:海南省海口市
}# 将查询参数拼接到基本的url中
new_data urllib.parse.urlencode(data)
url base_url new_data# 定制请求对象
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
}
request urllib.request.Request(urlurl, headersheaders)# 向请求对象发出请求
response urllib.request.urlopen(request)# 转换为utf-8编码打印出来
content response.read().decode(utf-8)
print(content)二post请求方式
import urllib.parse
import urllib.request# 指定url、请求头文件、请求查询参数
url https://fanyi.baidu.com/sug
header {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
}
data {kw: spider
}# 对查询参数进行编码
data urllib.parse.urlencode(data).encode(utf-8)# 定制请求对象将查询参数放到请求对象中
request urllib.request.Request(url, data, header)# 向请求对象发出请求
response urllib.request.urlopen(request)# 转换为utf-8编码的json文件打印出来
content response.read().decode(utf-8)
import json
obj json.loads(content)
print(obj)五、代理IP的使用
代理的常用功能包括可以突破自身IP的限制访问单位或团体的内部资源提高访问的速度隐藏自己的IP地址免受攻击。
import urllib.request# 请求对象的定制
url http://www.baidu.com/s?wdip
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
}
request urllib.request.Request(urlurl, headersheaders)# 代理IP池
proxiesPool [{http: 182.34.21.22:9999},{http: 60.182.35.230:8888}
]# 随机从代理IP池中选择一个IP
import random
proxies random.choice(proxiesPool)# 使用handler对象创建opener对象
handler urllib.request.ProxyHandler(proxiesproxies)
opener urllib.request.build_opener(handler)# 向opener对象发出请求
response opener.open(request)content response.read().decode(utf-8)
with open(ip.html, w, encodingutf-8) as fp:fp.write(content)