pyhton urllib
urlopen
form urllib import request
resp=request.urlopen("http://www.baiud.com")
print(reso.read()) # 获取网页源码
reso.readlines() 读取多行
reso.readlines(10) 读取10行
reso.read() 读取一行
reso.getcode() 返回响应码
urlretriexe 函数 (下载网页文件)
from urllib import request
request.urlretrieve("http://www.baiud.com","baidu.html") # 前面的参数是url,后面是路径,
urlencode函数:(url的编码)
用浏览器发送请求的时候,如果url中包含了中文或者其他字符,那么浏览器会自动给我们进行编码.而如果代码发送请求,那么久必须手动进行编码,这个时候就应该用urlencode 函数来实现. urlencode 可以吧字典数据转化为 url 编码的数据
from urllib import parse
data={"name":"爬虫","greet":"hello"}
qs=parse.urlencode(data)
print(qs)
结果:
name=%E7%88%AC%E8%99%AB&greet=hello
parse_qs 函数:(url解码)
可以将经过编码的url参数进行解码:
from urllib import parse
qs="name=%E7%88%AC%E8%99%AB&greet=hello"
print(parse.parse_qs(qs))
输出:
{'name': ['爬虫'], 'greet': ['hello']}
urlparse 和urlsplit(分割网站的用法)
urlsplit 里面没有 params这个提取属性 其他的和parse 一样
访问网页1(反爬虫)
from urllib import parse,request
url="" # 准备的url 地址
headers={"user-agent":"",
"referer":"",
} # 准备的请求头,和之前访问的网站
data={}; # 这个是要请求的表单信息
# 这里主要要把data的数据格式改一下
re=request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST')
r=request.urlopen(url)
print(r.read())
ProxyHandler 处理器(代理设置)
from urllib import parse,request
# 这个是请求了代理
handler=request.ProxyHandler({"http":"218.66.161.88.31769"})
# 建立代理
opener=request.build_opener(handler)
req=request.Request("要爬取的网页")
......
cookie 的格式
用cookie登录
1.在headers 里面加cookie
headers={
"cookie":" 这里是浏览器cookie的数据不用吧等号分开! "
}
2.用cookiejar 自动提取cookie
from urllib import parse,request
from http.cookiejar import CookieJar
# 1. 登录
# 1.1 创建一个cookiejar对象
cookiejar=CookieJar()
# 1.2 使用cookiejar 创建一个HYYPCookieProcess 对象
handler=request.HTTPCookieProcessor(cookiejar)
# 1.3 使用上一步创建的handler创建一个opener
opener=request.build_opener(handler)
#1.4 使用 opener 发送登录请求(账号,密码)
headers={} # 规定请求头,和之前访问的网站,不需要cookie
data={
} # 提交post的数据
r_post=request.Request("登录的主页",data=parse.urlencode(data).encode("utf-8"),headers=headers)
opener.open(r_post)
# 2.访问个人主页
# 2.1 获取个人主页的信息,不要新建opener ,要用之前存了信息的opener
r=opener.open("要爬登录后的主页")
# 完成!
3.把cookie 存在本地文件
from urllib import parse,request
from http.cookiejar import MozillaCookieJar
cookiejar=MozillaCookieJar("cookies.txt")
# cookiejar.load(ignore_discard=True) #将过去的cookie下在在python里面
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
resp=opener.open("https://www.baidu.com/")
cookiejar.save()