Python爬虫 BeautifulSoup库实践——保存网页图片

Python爬虫(五)

学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。

—— BeautifulSoup库应用实践之保存网页 ——

  1. 引入库:
import requests
from bs4 import BeautifulSoup
  1. 确定保存路径(推荐使用绝对路径):
PATH = "/Users/Ezy/Documents/Test/freebuf/"
  1. 目标图片的地址,
url = "https://www.freebuf.com/"
  1. 获取图片
r = requests.get(url, "html.parser")
#“lxml”是Python 3 新增的参数,需要设定解析器,本地一般为‘lxml’
soup = BeautifulSoup(r.content,"lxml")
#寻找源代码中所有‘img’标签其中的‘src’参数,获取图片名称和地址
img_url = soup.find('img')['src']
#将图片名称提取出来,之所以要‘+1’是为了去掉‘/’,使其不会出现在图片名字中
img_name = img_url[img_url.rfind('/')+1:]
  1. 保存图片和网页
r = requests.get(img_url, "html.parser")
con = r.content
#注意:在Python 3 中要使用二进制写入模式(‘wb’)来开启待操作文件,而不能像原来Python 2 那样,采用字符写入模式(‘w’)
o = open(PATH + img_name, 'wb')
o.write(con)
o.close()

效果是:

BeautifulSoup库应用实践
BeautifulSoup库应用实践

  1. 但很显然,我们这段代码操作起来太复杂了,我们可以进行优化,首先我们将查找图片和保存图片封装进两个函数:
def getimg(img_url):

def main(url):
  1. 查找获取图片部分代码和之前一样:
def getimg(img_url):
    img_name = img_url[img_url.rfind('/')+1:]
    #本地的图片地址
    file = PATH + img_name
    r = requests.get(img_url, "html.parser")
    con = r.content
    o = open(file, 'wb')
    o.write(con)
    o.close()
    return file
  1. 保存图片部分代码稍加改动,并加上保存网页的代码,原理方法相同:
def main(url):
    r = requests.get(url, "html.parser")
    soup = BeautifulSoup(r.content,"lxml")

    imgs = soup.find_all('img')
    for img in imgs:
        img_url = img['src']
        print (img_url)
        img['src'] = getimg(img_url)

    o = open("D:/MyProject/image/test.html",'wb')
    o.write(str(soup))
    o.close()

if __name__ == "__main__":
    url = "https://www.freebuf.com/"
    main(url)

效果如图:
BeautifulSoup库应用实践
BeautifulSoup库应用实践

——————完整代码请点击链接查看。

发布了44 篇原创文章 · 获赞 13 · 访问量 7488

猜你喜欢

转载自blog.csdn.net/qq_44867435/article/details/104434579