Python--爬虫爬取优美图库--bs4(BeatifulSoup)入门

目录

一、bs4简介

二、步骤

2.1、准备好运行环境:

2.2、下载bs4:

2.3、上手操作

2.3.1、确定目标主页面源代码截图与子页面源代码截图:

2.3.2、核心的思路:

2.4、导库

2.5、发起请求

2.6、生成bs4对象

2.7、第一次定位

2.8、第二次发起请求并生成bs4对象

2.9、子页面第一次定位

2.10、子页面最终定位与提取

2.11、下载图片与保存

2.12、主函数入口

三、结果

3.1、节省时间,只运行了一下下,把爬取到的图片保存到文件内,并按我们规定的名称进行保存。

四、问题与总结

4.1、问题:

4.1.1:使用bs4对象.find_all()函数(未使用遍历),会出现报错:具体报错啥忘了,

4.1.2:如何更好的保存数据?如何一次性爬取全站内容?

4.2、总结:

4.2.1:明确爬取内容,和步骤;

4.2.2:页面的转换需要及时发起请求生成bs4对象;

4.2.3:下载的内容保存的方法;


一、bs4简介


全称:BeatifulSoup;

作用:解析页面源代码,提取页面内容;

本次使用的bs4函数:bs4对象.find(),bs4对象.find_all();BeatifulSoup();bs4对象.get(“属性值”);四个函数


BeatifulSoup()函数:使用方法为:BeatifulSoup(页面源代码,“页面源代码格式”),用法如下

result1 = BeautifulSoup(resp_content1, "html.parser")

返回的resulut1是一个bs4对象


bs4对象.find()函数:查找第一个符合要求的数据并返回,使用方法为:bs4对象.find(“标签名”, 标签属性=“值”)->简单用法,如下

li1 = result2.find("div", class_="TypeList")

返回的li1是一个bs4对象,并且范围缩小为div标签;


bs4对象.find_all()函数:查找全部符合要求的数据并返回,使用方法为:bs4对象.find(“标签名”, 标签属性=“值”)->简单用法,如下

all_a = it2.find_all("a", class_="TypeBigPics")

返回的all_a是一个包含全部符合筛选要求的数据的列表,在使用时需要进行遍历取出,使用方法如下:

all_a = it2.find_all("a", class_="TypeBigPics")
        for it3 in all_a:
            x += 1
            all_img = it3.find("img")
            all_src = all_img.get("src")

bs4对象.get()函数使用:bs4对象.get(“属性值”),使用方法如下:

all_img = it3.find("img")    
all_src = all_img.get("src")    # 取出img标签的src值

二、步骤

2.1、准备好运行环境:

系统:win10家庭版,编辑器:pycharm edu

需要的库:requests、bs4、time

需要知道怎么看是get请求,还是post请求或者其它提交参数的请求。

2.2、下载bs4:

如下图,2.2.1/2.2.2/2.2.3

                                               图2.2.1

 

                                                                    图2.2.2

                                                                     图2.2.3

等待几分钟即下载完成。

2.3、上手操作

2.3.1、确定目标主页面源代码截图与子页面源代码截图:

如何查看页面源代码呢?

在网页随便一个地方鼠标右键点击,查看页面源代码。如下图2.3.1

                                                                         图2.3.1

主页面源代码:

 

子页面源代码:

 本次目标:

# 优美图库
# 1、拿到主页面源代码,交给bs4
# 2、拿到子页面源代码,交给bs4
# 3、拿到图片链接,下载,保存到文件或者数据库(正在学习)

下面的代码都是基于要爬取的页面源代码进行分析。

2.3.2、核心的思路:

1、第一次发起请求,进入主页面源代码,生成bs4对象,使用上面的两个函数缩小范围,拿到我们需要的内容,不是链接的则拼接成链接;

2、第二次发起请求,进入子页面源代码,生成bs4对象,使用上面的两个函数缩小范围,拿到我们需要的内容,第三次发起请求,进行下载所需内容,并保存。

2.4、导库

# 导入需要使用的库
import requests
from bs4 import BeautifulSoup
import time

2.5、发起请求

url1 = "http://www.umeituku.com/"

# 发送请求,获取源码
resp1 = requests.get(url1)
resp1.encoding = 'utf-8'
resp_content1 = resp1.text

2.6、生成bs4对象

# 把源码给bs4,进行处理
result1 = BeautifulSoup(resp_content1, "html.parser")

2.7、第一次定位

# 定位
alist1 = result1.find("div", class_="SpecBox indexSpec fc").find("a")
href = alist1.get("href")
url2 = "http://www.umeituku.com/" + href
# print(url2) http://www.umeituku.com//tags/shaofu.htm

2.8、第二次发起请求并生成bs4对象

# 第二次发起请求
resp2 = requests.get(url2)

resp2.encoding = 'utf-8'
resp2_content = resp2.text
result2 = BeautifulSoup(resp2_content, "html.parser")
# print(result2) 拿到子页面源码

2.9、子页面第一次定位

li1 = result2.find("div", class_="TypeList").find_all("li")
# print(li1)  # 范围缩小到li,[<li>...]

2.10、子页面最终定位与提取

x = 0
    for it2 in li1:
        all_a = it2.find_all("a", class_="TypeBigPics")
        for it3 in all_a:
            x += 1
            all_img = it3.find("img")
            all_src = all_img.get("src")
        src_resp = requests.get(all_src)
        src_content = src_resp.content
        img_name = "img{}.jpg".format(x)

2.11、下载图片与保存

with open("img_meinv/"+img_name, mode="wb") as f:
     f.write(src_content)
     time.sleep(3)
     print("img{}下载完成".format(x))

2.12、主函数入口

if __name__ == '__main__':
    down_img()
    print("爬取结束")

三、结果

3.1、节省时间,只运行了一下下,把爬取到的图片保存到文件内,并按我们规定的名称进行保存。

 

四、问题与总结

4.1、问题:

4.1.1:使用bs4对象.find_all()函数(未使用遍历),会出现报错:具体报错啥忘了,

解决方法:在使用bs4对象.find_all()函数时,提取下一个标签的内容一定要使用遍历(for循环即可)才能取出内容(因为返回的是一个列表)。

4.1.2:如何更好的保存数据?如何一次性爬取全站内容?

4.2、总结:

4.2.1:明确爬取内容,和步骤;

4.2.2:页面的转换需要及时发起请求生成bs4对象;

4.2.3:下载的内容保存的方法;

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值