用requests 模块做了个简单的爬虫小程序,将博客的一篇文章以及图片保存到本地,文章格式存为'.html'。当文章保存到本地后,图片的连接可能是目标站点的绝对或者相对路径,所以要是想在本地也显示图片,需要将保存下来图片的本地路径替换到本地的html文件里。

保存网页用的时requests模块,保存图片用的时BeautifulSoup, 这两个都是第三方模块,需要安装,使用时需要手动导入。

**安装方式:

pip install requsts

在python3 可能用 pip install beautifulsoup 会报错,可以直接pip install bs4, 这样时可以成功安装的。

因为其实beautifulsoup 在bs4安装包中,使用的时候采用:from bs4 import  beautifulsoup

具体的代码如下:

 from bs4 import BeautifulSoup
import requests,os
targetDir = os.path.join(os.path.dirname(os.path.abspath(__file__)),'imgs1')#图片保存的路径,eg,向前文件夹为'D:\Coding', 即图片保存在'D:\Coding\imgs1\'
if not os.path.isdir(targetDir):#不存在创建路径
os.mkdir(targetDir)
url = 'http://www.cnblogs.com/nancyzhu/p/8146408.html'
domain = 'http://www.cnblogs.com'
#保存页面到本地
def save_html():
r_page = requests.get(url)
f = open('page.html','wb')
f.write(r_page.content)#save to page.html
f.close()
return r_page
#修改文件,将图片路径改为本地的路径
def update_file(old,new):
with open('page.html', encoding='utf-8') as f, open('page_bak.html', 'w',
encoding='utf-8') as fw: # 打开两个文件,原始文件用来读,另一个文件将修改的内容写入
for line in f: # 遍历每行,取出来的是字符串,因此可以用replace 方法替换
new_line = line.replace(old, new) # 逐行替换
fw.write(new_line) # 写入新文件
os.remove('page.html') # 删除原始文件
os.rename('page_bak.html', 'page.html') # 修改新文件名, old -> new
#保存图片到本地
def save_file_to_local():
obj = BeautifulSoup(save_html().content, 'lxml') # 后面是指定使用lxml解析,lxml解析速度比较快,容错高。
imgs = obj.find_all('img')
#将页面上图片的链接加入list
urls = []
for img in imgs:
if 'data-src' in str(img):
urls.append(img['data-src'])
else:
urls.append(img['src'])
#遍历所有图片链接,将图片保存到本地指定文件夹,图片名字用0,1,2...
i = 0
for url in urls:#看下文章的图片有哪些格式,一一处理
if url.startswith('//'):
new_url = 'http:' + url
r = requests.get(new_url)
elif url.startswith('/') and url.endswith('gif'):
new_url = domain + url
r = requests.get(new_url)
elif url.endswith('.png') or url.endswith('jpg') or url.endswith('gif'):
r = requests.get(url)
t = os.path.join(targetDir, str(i) + '.jpg')#指定目录
fw = open(t,'wb') # 指定绝对路径
fw.write(r.content)#保存图片到本地指定目录
i += 1
update_file(url,t)#将老的链接(有可能是相对链接)修改为本地的链接,这样本地打开整个html就能访问图片
fw.close() if __name__ == '__main__':
save_html()
save_file_to_local()

python3 用requests 保存网页以及BeautifulSoup保存图片,并且在本地可以正常显示文章的内容和图片的更多相关文章

  1. python3使用requests登录人人影视网站

    python3使用requests登录人人影视网站 继续练习使用requests登录网站,人人影视有一项功能是签到功能,需要每天登录签到才能升级. 下面的代码python代码实现了使用requests ...

  2. python3使用requests发闪存

    闪存ing.cnblogs.com是博客园类似推特.饭否的服务, 我写了以下程序可以完成发闪存的操作,目的是顺便练习使用requests库. requests是一个python 轻量的http客户端库 ...

  3. Python3下requests库发送multipart/form-data类型请求

    [本文出自天外归云的博客园] 要模拟multipart/form-data类型请求,可以用python3的requests库完成.代码示例如下: #请求的接口url url = "url&q ...

  4. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  5. Python3:Requests模块的异常值处理

    Python3:Requests模块的异常值处理 用Python的requests模块进行爬虫时,一个简单高效的模块就是requests模块,利用get()或者post()函数,发送请求. 但是在真正 ...

  6. Python3之Requests模块详解

    # 导入 Request模块 # 若本机无自带Request模块,可自行下载或者使用pip进行安装 # python版本Python3 import requests import json #### ...

  7. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  8. 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...

  9. centos6装python3,并安装requests, lxml和beautifulsoup模块

     一.  安装python3并设为默认版本,与python2共存 1.下载Python3.4安装包 wget https://www.python.org/ftp/python/3.4.4/Pytho ...

随机推荐

  1. Hive:数据仓库工具,由Facebook贡献。

    Hadoop Common: 在0.20及以前的版本中,包含HDFS.MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Co ...

  2. hrbustoj 1142:围困(计算几何基础题,判断点是否在三角形内)

    围困 Time Limit: 1000 MS     Memory Limit: 65536 K Total Submit: 360(138 users) Total Accepted: 157(12 ...

  3. Linux下Apache与httpd的区别与关系

    http://blog.csdn.net/yxfabcdefg/article/details/32324035

  4. AWS系列-使用Could Events定时对EC2打快照

    第1章 使用Could Events定时对EC2打快照 1.1 打开控制台搜索CloudWatch 在搜索栏输入CloudWatch,点击进入CloudWatch控制台 1.2 选择进入Events ...

  5. 简单脱壳教程笔记(8)---手脱EZIP壳

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 EZIP壳 : ...

  6. ios开发之--使用AFNetWorking 3.1.0 ,简单的请求封装类

    从苹果系统自带的请求类,到ASIHttpRequest第三方请求类,再到AFNetWorking第三方请求类,目前只要牵扯到数据请求,基本上都是用AFN,所以,这里纯粹是记录下: hRequestTo ...

  7. 四个dos命令检查你的电脑是否中木马

    一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出. 命令是再CMD中输入,不是运行框中 一.检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但 ...

  8. Struts2数据验证与使用Java代码进行数据验证

    Struts2数据验证 使用Java代码进行数据验证 重写ActionSupport的validate()方法 对Action类的中所有请求处理方法都会进行验证! 对Action类的数据属性进行检查, ...

  9. Zabbix自动发现与主动注册

    接上篇:Zabbix监控主动模式 网络自动发现 zabbix agent的配置文件/etc/zabbix/zabbix_agentd.conf 注释StartAgents=0 添加 HostnameI ...

  10. python学习笔记(三)— 文件操作

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件a.txt: 登鹳雀楼 唐代:王之涣 白日依山尽,黄河入海流. 一.文件基 ...