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

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值