需求分析
大部分有志青年都想建立属于自己的个人网站,从零开始设计一个网站界面结构虽然听上去很nice,可是时间宝贵,为了加快开发进度,我们还是先考虑下载一个与我们的需求大致相同的网站,然后再进行改造与创新,但是一个网站往往有许多文件,一个一个点击保存,费时费力费事,本次程序就是为了将这些繁琐操作交由计算机自己去处理,解放双手,省时省力省事。
基础知识
正则表达式
这里通俗的说一下概念(我自己定义的说法):
表达式里中括号表示一个 字符集,例如
[abcd]表示一个仅包含“a,b,c,d"四个字符的字符集
花括号表示数量,紧随字符集之后,以限定字符集的使用次数
[abcd]{1,3}表示匹配一个由abcd四个字符构成且字符数大于等于1个,但不超过3个
其它较为高级用法可以参考公众号frigress里的一篇文章
参考链接:https://mp.weixin.qq.com/s/l135XPUve7BvrdokuLZGGg
或者直接参考菜鸟教程
参考链接:https://www.runoob.com/regexp/regexp-syntax.html
python网络请求
1.这里使用requests包
安装:
在 windows 系统下,只需要输入命令 pip install requests ,即可安装。
在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安装。
在windows下如果不想安装pip可以按下面步骤安装requests包
1)下载requests。https://pypi.org/project/requests/
2)解压之后有两个文件为setup.py和requests.py两个文件。
3)打开cmd,进入解压文件夹
4)输入:python.exe目录+setup.py install,如:C:\Python36\python.exe setup.py install
5)打开IDLE,引入requests。
import requests
2.使用requests.get(url…)访问网络
由于大部分网站都会检测"User-Agent"进行反爬虫防护,所以我们需要修改tcp首部中的"User-Agent"字段,我们打开浏览器的开发者工具并选择Network随便访问一个网站
如下图,复制圈2的内容即可
代码:
//创建首部
DefaultHeader = { 'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}
//使用首部进行访问
requests.get(url,headers=DefaultHeader)
3.服务器响应报文的获取与使用
resp=requests.get()会返回服务器的响应
bct=resp.content //bct字节流方式获取响应的内容
resp.encoding='utf8' //使响应使用utf8进行解码
ct=resp.text//ct为响应解码后的数据
文件读写
with open(Filename, Type) as file:
file.write(fcontent)
file.close()
Type的取值:
r: 以只读方式打开文件。
rb: 以二进制格式打开一个文件用于只读。
r+: 打开一个文件用于读写。
rb+:以二进制格式打开一个文件用于读写。
w: 打开一个文件只用于写入。覆盖或创建新文件。
wb: 以二进制格式打开一个文件只用于写入。覆盖或创建新文件。
w+: 打开一个文件用于读写。覆盖或创建新文件。
wb+:以二进制格式打开一个文件用于读写。覆盖或创建新文件。
a: 打开一个文件用于追加(文件指针将会放在文件的结尾)。无则创建新文件。
ab: 以二进制格式打开一个文件用于追加(文件指针将会放在文件的结尾)。无则创建新文件。
a+: 打开一个文件用于读写(文件指针将会放在文件的结尾)。无则创建新文件。
ab+:以二进制格式打开一个文件用于追加(文件指针将会放在文件的结尾)。无则创建新文件。
file对象的属性(只列举部分)
file.close() //关闭文件
file.write(content) //写入content,content的类型与file的打开方式有关(字节流或字符串)
实现
基本思路
step1:输入 网站主页url
step2:访问url,得到服务器响应respond
step3:保存respond的内容,因为它是网站主索引html文档
step4:搜索url中的有用链接urls
step5:访问每一个有用链接urls,并保存为对应文件
step6:结束
这里需要注意的是step4中"有用链接"是指 渲染网站主页url所需要的资源链接(例如js文件,css文件,图片等),不参与渲染的链接属于"无用链接"(例如页面跳转的链接)
具体实现
'''导入包'''
import re
import os
import requests
'''缺省值'''
'''网站url'''
DefaultWebUrl="http://localhost:5070/"
'''请求首部'''
DefaultHeader = {
'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}
'''保存地址,默认设置为代码所在同级目录'''
DefaultSavePath=os.getcwd().replace("\\","/")
'''以string方式获取url内容'''
def GetUrlAsUTF8(url):
resp = requests.get(url, timeout=10, headers=DefaultHeader)
resp.encoding = 'utf8'
return resp.text
'''以字节流方式获取url内容'''
def GetUrlAsByteArray(url)