1. urllib.request模块
1.1 版本
python2 :urllib2、urllib
python3 :把urllib和urllib2合并,urllib.request
1.2 常用的方法
urllib.request.urlopen(" 网址") 作 :向网 站发起 一个请求并 获取响应
字节流 = response.read()
字符串 = response.read().decode("utf-8")
urllib.request.Request" 网址",headers="字典") urlopen()不 支持重构 User-Agent
1.3 响应对象
read() 读取服务器响应的内容
getcode() 返回HTTP的响应码
geturl() 返回实际数据的URL(防止重定向问题)
2. urllib.parse模块
2.1 常用方法
urlencode(字典)
quote(字符串) (这个里面的参数是个字符串)
3.请求方式
GET 特点 :查询参数在URL地址中显示
POST
在Request 法中添加data参数
urllib.request.Request(url,data=data,headers=headers)
data :表单数据以bytes类型提交,不能是str
4. requests模块
4.1 安装
pip install requests
在开发 工具中安装
4.2 request常用方法
requests.get( 网址)
4.3 响应对象response的方法
response.text 返回unicode格式的数据(str)
response.content 返回字节流数据( 二进制)
response.content.decode('utf-8') 手动进行解码
response.url 返回url
response.encode() = ‘编码’
4.4 requests模块发送 POST请求
4.5 requests设置代理
使 requests添加代理只需要在请求 方法中(get/post)传递proxies参数就可以了
代理网站
西刺免费代理IP:http://www.xicidaili.com/
快代理:http://www.kuaidaili.com/
代理云:http://www.dailiyun.com/
4.6 cookie
cookie :通过在客户端记录的信息确定 用户身份
HTTP是一 种 无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下 次请求时,服务器会认为是 个新的客户端,为了维护他们之间的连接,让服务器知道这是前一 个 户发起的请求,必须在 一 个地方 保存客户端信息。
4.7 session
session :通过在服务端记录的信息确定用户身份 这里 这个session就是 一个指
的是会话
4.8 处理不信任的SSL证书
什么是SSL证书?
SSL证书是数字证书的 一种,类似于驾驶证、护照和营业执照的电 副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能
5. requests 模块源码分析
以下是代码部分
import urllib.request
# response 是响应对象
response = urllib.request.urlopen('https://qq.yh31.com/zjbq/2920180.html')
# read()把相应对象里面的内容读取出来
html = response.read().decode('utf-8')
print(type(html),html)
# encode() 字符串--> bytes数据类型
# decode() bytes数据类型 --> 字符串
----------------------------------------------------------------
import urllib.parse
name = {'wd':'海贼王'}
name = urllib.parse.urlencode(name)
print(name)
--------------------------------------------------------------------------
import urllib.request
import urllib.parse
baseurl = 'https://www.baidu.com/s?wd='
name = input('请输入搜索内容:')
name = urllib.parse.quote(name)
url = baseurl + name
print(url)
---------------------------------------------------
import urllib.request
url = 'http://www.baidu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
# 1.创建请求对象
req = urllib.request.Request(url,headers=headers)
# 2.获取相应对象
response = urllib.request.urlopen(req)
# 3.读取响应对象内容 read().decode('utf-8')
html = response.read().decode('utf-8')
# print(html)
# print(response.getcode()) # 返回状态码
print(response.geturl()) # 返回实际给我们数据的url
# 使用流程
# 1.利用Request()方法构建请求对象
# 2.利用urlopen()方法获取响应对象
# 3.利用响应对象中的read().decode('utf-8')中的内容
--------------------------------------------------------------------
import random
import urllib.request
import urllib.parse
# 需求:输入要爬取贴吧的名称,在输入爬取的起始页和终止页,把每一页保存到本地
# 分析:1.找url的规律
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=0 第一页
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=50第二页
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=100 第三页
# 页数的规律 pn = (当前页数 - 1)*50
# 2.获取网页的内容
# 3.保存数据
import random
import urllib.request
import urllib.parse
# 随机获取一个ua
headers_list = [{ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'},{'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'}]
headers = random.choice(headers_list)
name = input('请输入贴吧名:')
start = int(input('请输入起始页:'))
end = int(input('请输入结束页:'))
# 对贴吧name进行编码
kw = {'kw':name}
kw = urllib.parse.urlencode(kw)
# 拼接url 发请求 或响应 保存数据
for i in range(start,end+1):
# 拼接url
pn = (i - 1)*50
baseurl = 'https://tieba.baidu.com/f?'
url = baseurl + kw + '&pn=' + str(pn)
# 发起请求
req = urllib.request.Request(url,headers=headers)
# print(url)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
# 写入文件
filename = '第' + str(i) + '页.html'
with open(filename,'w',encoding='utf-8') as f:
print('正在爬取第%d页'%i)
f.write(html)
-----------------------------------
# 请输入你要搜索的内容 :美女 保存到本地文件 美女.html
import urllib.request
import urllib.parse
# https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B
# 拼接url
baseurl = 'https://www.baidu.com/s?'
name = input('请输入你要搜索的内容:')
# 进行urlencode()编码
wd = {'wd':name}
name = urllib.parse.urlencode(wd)
url = baseurl + name
# print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36','Cookie':'BIDUPSID=4FA733ACE6D4F90A52D99F5F363CD85A; PSTM=1576929032; sug=3; sugstore=0; ORIGIN=0; bdime=0; BAIDUID=4FA733ACE6D4F90A83BE743C46630339:SL=0:NR=10:FG=1; BD_UPN=12314753; BDUSS=VFPUlFGU0RER1ZtcDdTR1lPek5vcEdZcUMtRFNNUkN3VHZTb35Cb1hRR0duOHRlRVFBQUFBJCQAAAAAAAAAAAEAAADzvSajSjdnaGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYSpF6GEqReR; MCITY=-158%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=; H_PS_645EC=9e896%2FhdaWy7uBsYfIeQKxjhCoWB1I56kSiZk45G7DyeSZsVpqa6Fx3Np2k; COOKIE_SESSION=3052_0_9_9_86_16_0_0_9_8_15_0_0_0_10_0_1588076550_0_1588079592%7C9%235669_143_1586614174%7C9'
}
# 创建请求对象
req = urllib.request.Request(url,headers=headers)
# 获取响应对象
res = urllib.request.urlopen(req)
# 读取响应对象内容
html = res.read().decode('utf-8')
# 写入文件
with open('结果.html','w',encoding='utf-8') as f:
f.write(html)
----------------------------------------
data = {
'i': '你好',
'from': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15880623642174',
'sign': 'c6c2e897040e6cbde00cd04589e71d4e',
'ts': '1588062364217',
'bv': '42160534cfa82a6884077598362bbc9d',
'doctype': 'json',
'version': '2.1',
'keyfrom':'fanyi.web',
'action': 'FY_BY_CLICKBUTTION'
}
# https://www.baidu.com/s?wd=%E5%A6%B9%E5%AD%90
python爬虫笔记,urllib.request模块的运用方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.