爬虫学习打卡2——BeautifulSoup

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示在博客中。最重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~

BeautifulSoup库

BeautifulSoup库使用的基础部分我就不说了,大家看一下我最后面给的参考博客包括文档里面讲了很多这个库的常用方法,我也是自己看一下别人的博客就上手做了,大家可以了解几个重要的概念就直接实战一下,等到要深入再细看官方文档。这篇文章就直接把我自己操作的过程贴出来了(入门级别的爬取操作),供大家参考。本次就做一个从网页上爬图片的练习。

1.获取图片url

首先,打开网页http://588ku.com/chahua-zt/1382.html
右键审查元素,你鼠标移动到哪一行代码,对应在页面上的内容就会以加上一层蒙板的形式显示出来,因此只要专门点击能让页面中图片有蒙板的代码,逐层点击打开之后,发现该页面上所有的图片url都在img标签下,并且有共同的class=“lazy”,于是编辑下列代码
这里写图片描述

import requests
from bs4 import BeautifulSoup

 #给请求指定一个请求头来模拟浏览器
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
webUrl="http://588ku.com/chahua-zt/1382.html"
 #向目标url地址发送get请求,返回一个response对象
respon=requests.get(webUrl,headers=headers)
all_img=BeautifulSoup(respon.text,'lxml').find_all('img',class_="lazy")#获取网页中的class为lazy的所有img标签
#遍历all_img,打印所有的img的url
for img in all_img:
    print(img['data-original'])

运行结果:打印了该页面所有图片的url
这里写图片描述
我用的是360浏览器,User-Agent查看方式:在网页右键——审查元素——Network——左下方Name随便点击一个对象,都能在右方看到User-Agent
这里写图片描述

2.获取图片名称

因为要从该网页上下载图片,又需要jpg文件名,因此还要爬取图片名称,在刚才第1张图中发现所有的图片name都在div标签下,并且有共同的class=“tpl-img-title”因此与第一片代码片相似,又编辑以下代码

import requests
from bs4 import BeautifulSoup

 #给请求指定一个请求头来模拟浏览器
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
webUrl="http://588ku.com/chahua-zt/1382.html"
 #向目标url地址发送get请求,返回一个response对象
respon=requests.get(webUrl,headers=headers)
imgName=BeautifulSoup(respon.text,'lxml').find_all('div',class_="tpl-img-title")#获取网页中的class为lazy的所有img标签
#遍历all_img,打印所有的imgname
for img in imgName:
    print(img.string)

运行结果:
这里写图片描述

3.编辑完整代码

现在图片url和名称都有了,就整理一下编辑完整代码啦,具体要理解的部分我都有在代码中注释

import requests
from bs4 import BeautifulSoup
import os
import time

class beautifulPicture(): 
    def __init__(self): #类的初始化
        #给请求指定一个请求头来模拟浏览器
        self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
        self.webUrl="http://588ku.com/chahua-zt/1382.html"
        self.savePath="F:\Python\SPIDER\pictures"#照片保存的文件夹地址
    #封装请求方法
    def request(self, url):
        respon = requests.get(url,headers=self.headers)
        return respon
    #在文件目录下保存图片,要先创建文件目录,这个函数创建文件夹  
    def mkdir(self, path):  
        path = path.strip()
        isExists = os.path.exists(path)
        if not isExists:
            print('创建名字叫做', path, '的文件夹')
            os.makedirs(path)
            print('创建成功!')
        else:
            print(path, '文件夹已经存在了,不再创建')

    def save_img(self, url, name): ##保存图片
        print('开始保存图片...')
        img = self.request(url)#根据图片url提交请求
        time.sleep(5)
        file_name = name + '.jpg'
        print('开始保存文件')
        f = open(file_name, 'ab')
        f.write(img.content)
        print(file_name,'文件保存成功!')
        f.close()

    def get_pic(self):
        print('开始网页get请求')
        respon = self.request(self.webUrl)
        print('开始获取所有img标签')#获取网页中的class为lazy的所有img标签
        all_img=BeautifulSoup(respon.text,'lxml').find_all('img',class_="lazy")
        print('开始获取所有imgName')#获取img对应的标题,得到所有的imgName
        imgName=BeautifulSoup(respon.text,'lxml').find_all('div',class_="tpl-img-title")
        print('开始创建文件夹')
        self.mkdir(self.savePath) #创建文件夹
        print('开始切换文件夹')
        os.chdir(self.savePath)  #切换路径至上面创建的文件夹

        for img in all_img: #遍历all_img,获取标签中图片的url并且进行网络请求,最后保存图片
            img_url=img['data-original']#得到每个img所对应的网址 
            imgNameIndex=all_img.index(img)#得到每个img的索引值,因为all_img中的img和imgName中的照片名分别一一对应
            #所以img的索引值等于每张照片的标题的索引值
            img_name=imgName[imgNameIndex].string#根据索引值得到相应的照片标题,并将标题转为字符串格式
            self.save_img(img_url, img_name) #调用save_img方法来保存图片

beauty = beautifulPicture()  #创建类的实例
beauty.get_pic()  #执行类中的方法

运行结果:
这里写图片描述
这里写图片描述

附:
&官方文档https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
&参考博客
1.Python爬虫利器二之Beautiful Soup的用法 | 静觅 https://cuiqingcai.com/1319.html
2.Python爬虫小白入门(三)BeautifulSoup库 - 阿里波特 - 博客园 http://www.cnblogs.com/Albert-Lee/p/6232745.html
3.python爬虫从入门到放弃(六)之 BeautifulSoup库的使用 - python修行路 - 博客园 https://www.cnblogs.com/zhaof/p/6930955.html
4.Python爬虫库-Beautiful Soup的使用 - 简书 https://www.jianshu.com/p/5c239bcd05a3

猜你喜欢

转载自blog.csdn.net/Leo_Huang720/article/details/81411855
今日推荐