python爬取网站源代码+图片

需求分析

大部分有志青年都想建立属于自己的个人网站,从零开始设计一个网站界面结构虽然听上去很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的内容即可
获取user-agent
代码:

//创建首部
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)
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值