1.urllib库的几个基础方法
from urllib importrequest,parse
request.urlretrieve("http://www.baidu.com","index.html")#可快捷的将网页源码保存到本地
req=request.Request("http://www.renren.com/880151247/profile",headers=headers,data=parse.urlencode(data).encode('utf-8'),method='GET')#这是一个请求
resp =request.urlopen(req)#得到一个响应
print(resp.read().decode('utf-8'))#此处对响应进行解码
#parse.urlencode() :#请求中的data数据为浏览器发出的请求头中的form data,因为form data是可能包含中文或者特殊字符,我们需手动把它编码,再对编码后的str进行编码,才可以#parse.parse_qs():
#与上面的parse.urlencode()作用相反,是对编码后的字符进行解码。
编码指从可读的字节流转换为可传输的字符流 即 str -> bytes 一般用encode()
解码指从不可读的字符流转换为可读的字节流 即 bytes -> str 一般用decode()
。。。。。。。。。。。。。。
另:urlsplite 和 urlparse 都是对url进行分割
例如http://www.baidu.com/s?wd=100#1
可分割为
scheme:http 协议
netloc:www.baidu.com 域名
path: /s 路径
params: 在路径和?查询语句之间的东西会由”;“开头 现在用的少 (urlsplit比urlparse少一个params)
query:wd=100 查询语句
fragment:1 锚点
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.通过ProxyHandler进行ip代理
由于同一ip多次爬去会被封禁所以进行ip代理
使用别的ip进行爬取,被封后可以换另一个
url = "http://www.renren.com/880151247/profile"handler= request.ProxyHandler({"http":"114.99.15.167:9999"})
opener=request.build_opener(handler)
resp= opener.open(url)
此处是在快代理上的免费ip
3.使用cookie进行模拟登录
由于某些网站需登陆后才可以进行访问
所以需要先正常登陆一次,保存此时的cookie信息,利用cookie信息多次爬取
from urllib importrequest,parsefrom http.cookiejar importCookieJar
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"}
data={"email":"970138047@qq.com","password":"pythonsplider"}
cookiejar=CookieJar()
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
req= request.Request("http://www.renren.com/SysHome.do",headers=headers,data=parse.urlencode(data).encode('utf-8'),method='GET')
opener.open(req)print(headers)#以上为打开登录页面 并将cookide利用
req = request.Request("http://www.renren.com/880151247/profile",headers=headers,data=parse.urlencode(data).encode('utf-8'),method='GET')
resp=opener.open(req)
#以下为文件保存
fh= open('F:\\renren.html', 'w', encoding='utf-8')
fh.write(resp.read().decode('utf-8'))
fh.close()
#由于没有真实可用的email和password
#所以代码未测试
******************************************************************************************************************************************************************************************
#下面这个保存了cookie信息from urllib importrequest,parsefrom http.cookiejar importCookieJafrom http.cookiejar importMozillaCookieJarheaders={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"}
data={"email":"970138047@qq.com","password":"pythonsplider"}
cookiejar= MozillaCookieJar("cookie.txt")
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
req= request.Request("http://www.renren.com/SysHome.do",headers=headers,data=parse.urlencode(data).encode('utf-8'),method='GET')
opener.open(req)
cookiejar.save(ignore_discard=True,ignore_expires=True)print(headers)#以上为打开登录页面 并将cookide利用req = request.Request("http://www.renren.com/880151247/profile",headers=headers,data=parse.urlencode(data).encode('utf-8'),method='GET')
resp=opener.open(req)
#以下为文件保存fh= open('F:\\renren.html', 'w', encoding='utf-8')
fh.write(resp.read().decode('utf-8'))
fh.close()