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

浙公网安备 33010602011771号