python-(6-4-4)爬虫---bs解析案例---爬取图片

本文介绍了一种爬取特定网站动漫图片的方法。首先获取主页面的源代码,并从中提取子页面链接;接着访问子页面获取图片下载地址;最后下载图片至指定文件夹。为避免服务器拒绝访问,程序在每次请求后会暂停一秒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 需求

拿到某网站的动漫图片

在这里插入图片描述

二 操作思路

1 拿到主页面的源代码,提取链接地址href

2 通过href拿到子页面的内容,并找到图片下载地址 img —> src

3 下载图片

三 分析步骤

1 拿到主页面的源代码,提取链接地址href

基于get请求,获取网页源代码的步骤分析,此处不作具体说明,可参考笔者的文章。
python-(6-3-1)爬虫—requests入门(基于get请求)

接着打开网页源代码,提取子页面的链接地址。

按住ctrl+F,搜索taotu-main,我们可以定位找到这些子页面的链接地址信息。

在这里插入图片描述

然后得到所有"a"标签的信息,将其遍历循环,从而得到每一个"a"标签后面对应的href,也就是子链接。

2 通过href拿到子页面的内容,并找到图片下载地址 img —> src

拿到子页面的源代码,然后从中拿到图片的下载地址

在这里插入图片描述

接着在网页源代码中搜索复制的文字,定位到这张图片的位置。

在这里插入图片描述
然后通过代码,就可以实现对下载地址的获取。

3 下载图片

如果想要将图片存储在某一文件夹下,需要提前创建好文件目录。

在下载较多的图片时,为了防止高频的网站请求被服务器挂掉,我们可以导入time模块,通过sleep程序,让程序等待几秒钟,然后再进行新的页面访问请求。

另外,在执行代码时,pycharm会对当前加载的文件夹中的所有内容做一个索引,以便快速查找数据。而我们下载的图片尽管是新增的文件,但pycharm也会对其建立索引。当下载的图片很多时,会占用系统资源,让pycharm很卡,所以图片文件的索引便没有构建的必要。

在这里插入图片描述

如上图操作,便可以取消对其文件夹建立索引。

四 完整代码

import requests
import sys
import io
from bs4 import BeautifulSoup
import time

# 改变标准输出的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

domain = 'https://www.umei.cc/katongdongman/'
headers = {
     "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36"
}
resp = requests.get(url=domain,headers=headers)

# 与网页源代码上的字符集对应
resp.encoding = "utf-8"
#print(resp.text)


# 把源代码交给bs
main_page = BeautifulSoup(resp.text,"html.parser")
# 把范围缩小,找到"taotu_main"下面的所有的"a"标签
a_list = main_page.find("div", class_= "taotu-main").find_all("a")

# 网站url
url_pre = "https://www.umei.cc"


# 遍历每一个a标签
for a in a_list:
    # 通过get拿到每个a标签中href属性的值
    href = a.get("href")
    url = url_pre + href

    # 拿到子页面的源代码
    child_page_resp = requests.get(url)
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text

    # 从子页面中拿到图片的下载链接
    child_page = BeautifulSoup(child_page_text, "html.parser")
    # 找到div标签
    div = child_page.find("div", class_="big-pic")
    # 找到div下面的img
    img = div.find("img")
    # 找到img下面的src图片下载地址
    src = img.get("src")
    print(src)
    #break  # 仅作测试使用

    # 下载图片
    img_resp = requests.get(src)
    # 拿到图片url最后一个/后面的内容
    img_name = src.split("/")[-1]

    # 放在当前目录下,img\目录下。该目录需要提前创建好
    with open("img/"+img_name,mode="wb") as f:
        # 获取图片数据的字节信息,就是图片的文件
        # 图片内容写入文件并保存
        f.write(img_resp.content)

    print("over!!!", img_name)

    # 每次遍历后程序休息1秒钟,防止因高频的访问请求被服务器干掉
    time.sleep(1)
    #break  #测试需要

print("all is over!!!!!!!")

# 关闭访问请求的连接
resp.close()
Python 爬虫 本项目依赖PythonBeautifulSoup4第三方库,使用本项目需要先安装BeautifulSoup4。 步骤一 安装依赖库: 安装BeautifulSoup4: 1.Debain或Ubuntu可以通过系统软件包管理安装 $sudo apt-get install Python-bs4 2.使用easy_install或者pip安装: $ sudo easy_install beautifulsoup4 或$ sudo pip install beautifulsoup4 easy_install和pip是Python的发行包管理工具,同样需要先安装才能使用,这里介绍easy_install的安装方法: 1.Mac OS X 系统可以在终端执行以下命令: curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python 2.Linux系统可以执行以下命令: wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 3.Window系统: 下载ez_setup.py并运行 步骤二 运行: 运行sexy.py文件爬取网站一: 1.不带参数运行:直接运行sexy.py,使用默认配置参数。 2.可用参数: -s 或 --startpage :起始扫描页面,默认值为1,从第一页开始扫描 -e 或 --endpage :最后扫描页面,默认值为65589。 -d 或 --dir :相对当前文件,下载图片保存位置,默认为sexy_images文件夹 -m 或 --max :获取页面失败后最大重试次数,默认为3 -n 或 --new :只获取最新更新的图片,强制设置起始扫描页为1,获取完毕后自动退出 例子:Sexy$ ./sexy.py -s 10 -e 12 -d cache -m 3 表示从第10页开始扫描到第12页,图片保存文件夹为cache,获取页面失败最多可以尝试3次。 3.运行期间可以随时按回车键退出程序。 运行atlas.py文件爬取网站二: 1.不带参数运行:直接运行atlas.py,使用默认配置参数,从主页开始爬取。 2.可用参数: -d 或 --dir :相对当前文件,下载图片保存位置,默认为atlas_images文件夹 -m 或 --max :获取页面失败后最大重试次数,默认为3 -v 或 --view :查看当前已知标签和标签id -t 或 --tag :爬取指定标签名的图片,同时提供标签id时,本标签无效 -i 或 --id :爬取指定标签id的图片 -l 或 --last :是否从上次退出的地方继续爬取,默认为false 3.运行过程中可以随时按Ctrl+C退出,退出时如果还有新发现标签没有归类,归类后自动退出。 4.setting文件中为已归类标签和最后抓取位置缓存,请勿删除。 测试环境: python 2.7 测试通过 License Copyright 2015 Jianan - qinxiandiqi@foxmail.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值