python小白学习记录 网页爬取html文件


1.urllib库的几个基础方法

 

from urllib import request,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 import request,parse
from http.cookiejar import CookieJar
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 import request,parsefrom http.cookiejar import CookieJafrom http.cookiejar import MozillaCookieJarheaders = {
"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()

 

 


 

posted @ 2020-02-08 20:25  jswf  阅读(617)  评论(0)    收藏  举报