python3 简单爬虫入门 抓取男神图

news2025/1/13 3:36:52

主要目的 为 快速爬虫入门
参考:https://blog.csdn.net/c406495762/article/details/72597755

注意编写日期:2023-3-9

如果时间过久,则代码可能会失效,如果失效,可以根据下面的解析过程,手动更新代码。

页面解析

1.主页面解析,进入网站,往下滚动,找到有很多图像的区域,该区域为主要内容区;
2.任意右键一个主要图像打开菜单,选中审查元素,打开 DOM树分析器。
3.观察DOM树,找到需要的标签的位置,记下它的特征,如本文:ul 标签 和 属性class="g-gxlist-imgbox " 就是主要内容区的特征
4.继续右键其他主要图像,选中审查元素,观察规律,可知:a 标签,带有 title 属性的即为入口区的特征
在这里插入图片描述
5.任意选一个图像进入子页面
6.往下滚动,随便右键一张大图,使用审查元素,打开DOM树解析器。
7.观察DOM树,找到主内容区域的特征:div 标签,包含属性 id=“zoom” class=“m_qmview”
8.往下看,找到评论标签的特征:p 标签,它的子标签不包含任何 img 标签
9.继续看,找到图像标签的特征:p 标签,子标签里面有一个 img 标签
在这里插入图片描述
10.根据以上特征,把链接提取出来,与站点链接拼接在一起,使用requests下载和保存/

完整代码和使用方法

首次安装python3后,使用请使用以下命令安装依赖库

pip install -U beautifulsoup4 requests

以下为完整代码,保存以下代码 到一个记事本文件中。
例如保存到 get.txt 里面
然后改名 get.txt 到 get.py
然后执行 python get.py 即可启动程序

#导入需要的库
import os
import time
import requests
from bs4 import BeautifulSoup
import urllib.parse

# 切换到当前文件夹
os.chdir(os.path.dirname(__file__))

# 要爬取的页面
url = 'http://www.shuaia.net/tp/shuaigetp/'
print('要爬取的链接:' + url)

# 获得页面的主站链接
url_parse = urllib.parse.urlparse(url)
base_url = url_parse.scheme + '://' + url_parse.netloc
print('主站链接:' + base_url)

# 设定请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

# 下载主页面
req = requests.get(url=url, headers=headers)
req.encoding = 'utf8'
 # 解析主页面
soup = BeautifulSoup(req.text, 'lxml')
 

# 通过 class 属性获得主要内容区域
main_page = soup.find_all(class_='g-gxlist-imgbox')[0]


# 获得每一个子页面入口的url
sub_pages = []

# 通过 a 标签搜索入口标签
for sub_page_entry in main_page.find_all('a'):
    # 如果入口标签有 title 属性,则认为是有效入口点
    if 'title' in sub_page_entry.attrs:
        # 获得子页面的标题
        new_title = sub_page_entry['title']
        # 获得子页面的url,并组装起来
        new_url = base_url + sub_page_entry['href']
        # 保存子页面的标题和链接到 sub_pages 列表中
        sub_pages.append([new_title, new_url])


# 循环下载解析每一个子页面,同时下载图像
for sub_title, sub_url in sub_pages:
    print('正在扫描子页面', sub_title, sub_url)
    print('子页面标题:'+sub_title)
    print('子页面链接:'+sub_url)

    # 生成一个文件夹
    os.makedirs(sub_title, exist_ok=True)

    # 打开一个文本文件,用来记录评论
    info_file = open(sub_title+'/info.txt', 'w', encoding='utf8')
    # 下载子页面
    sub_req = requests.get(url=sub_url, headers=headers)
    sub_req.encoding = 'utf8'
    # 解析子页面
    sub_soup = BeautifulSoup(sub_req.text, 'lxml')
    # 获得子页面主要内容区域
    sub_img_list = sub_soup.find_all('div', id='zoom', class_="m_qmview")[0]

    # 使用 p 标签搜索主要内容区域的图像
    for each_idx, each_img in enumerate(sub_img_list.find_all('p')):
        img_contents = each_img.find_all('img')

        # 如果该标签没有图像,那么该标签是一个评论标签
        if len(img_contents) == 0:
            info_file.write(each_img.text)

        else:
            # 获得子图像部分链接
            image_url = img_contents[0]['src']
            # 拼接为完整的子图像链接
            image_url = base_url + image_url

            # 拼接输出图像的路径
            out_image_path = f'{sub_title}/{each_idx}.jpg'
            if os.path.isfile(out_image_path):
                print('目标图像已下载,跳过')
                continue
            
            # 下载目标图像
            im_req = requests.get(url=image_url, headers=headers)
            if im_req.status_code != 200:
                print('下载失败,跳过')
                continue
            else:
                print('下载成功')
                open(out_image_path, 'wb').write(im_req.content)

        # 避免服务器过载        
        time.sleep(2)

    # 关闭评论文件
    info_file.close()

效果演示

终端输出
在这里插入图片描述
文件夹视图
在这里插入图片描述
内容+评论
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云端Docker搭建ABY库以及本地CLion使用

文章目录ABY的搭建以及使用前言ABY库的下载、安装及测试CLion配置后续杂项项目改名使用其他的库最后ABY的搭建以及使用 前言 仅做记录,仅供参考,不同人有不同的使用方式命令手敲,可能有错,自己辨识勿问,我懂的也不多…

C++ Primer Plus 第6版 读书笔记(6) 第 6 章 分支语句和逻辑运算符

第 6 章 分支语句和逻辑运算符 C是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。本书是根据2003年的ISO/ANSI C标准编写的,通过大量短小精悍的程序详细而全面地阐述了 C的基本概念和技术,…

从 Clickhouse 到 Apache Doris,慧策电商 SaaS 高并发数据服务的改造实践

作者介绍: 马成,慧策 JAVA高级研发工程师慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算 PaaS、SaaS 模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级,实现…

C++面向对象编程之六:重载操作符(<<,>>,+,+=,==,!=,=)

重载操作符C允许我们重新定义操作符(例如:,-,*,/)等,使其对于我们自定义的类类型对象,也能像内置数据类型(例如:int,float,double&…

Java 最小路径和

最小路径和中等给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid [[1,3,1],[1,5,1],[4,2,1]]输出&…

求“二维随机变量的期望E(X)与方差D(X)”例题(一)

离散型 设随机变量(X,Y)的联合分布律为 X\Y0100.10.210.30.4 (1)求E(X) 先求x的边缘分布律,表格里x0的概率为0.10.2,于是我们可得 X01P0.30.7直接求E(X)即可,得到结果 (2)求E(XY) 直接x与y相乘就行。 记得别乘多了,别的算了又…

代码随想录算法训练营day55 | 动态规划 583. 两个字符串的删除操作 72. 编辑距离

day55583. 两个字符串的删除操作1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组72. 编辑距离1. 确定dp数组(dp table)以及下标的含义2. 确定递推公式3. dp数组如何初始化4…

idea热部署

Dea 热部署方式汇总:一、开启自动编译修改file->settings->compiler->build project automatically二、开启允许在运行中修改文件按ctrlshifta,搜索Registry双击进去,点击面板搜索running,勾选下面的值:Eclip…

MySQL索引结构分类及其优劣选择详解

什么是索引? 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据库系统中,除了存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用&#xff0…

Nacos集群设置开机自启动

一、搭建前提需要的环境 -rw-rw-rw-. 1 root root 8491533 Mar 5 20:05 apache-maven-3.3.9-bin.tar.gz -rw-rw-rw-. 1 root root 189815615 Mar 23 2018 jdk-8u162-linux-x64.tar.gz -rw-r--r--. 1 root root 25548 Apr 7 2017 mysql57-community-release-el7-10.n…

HTML、CSS学习笔记7(移动适配:rem、less)

一、移动适配 rem:目前多数企业在用的解决方案vw / vh:未来的解决方案 1.rem(单位) 1.1使用rem单位设置尺寸 px单位或百分比布局可以实现吗? ————不可以 网页的根字号——HTML标签 1.2.rem移动适配 写法&#x…

双碳目标下基于“遥感+”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟

目录 专题一、双碳视角下遥感技术的研究方向 专题二、生态系统碳库的遥感估算—以森林碳储量为例 专题三、生态系统碳收支的遥感模拟—以京津冀地区为例 专题四、区域能源消耗碳排放空间格局模拟—基于夜间灯光数据 专题五、土地利用变化碳排放效应的遥感监测—以城市扩张…

PLSQL Developer 安装指南

PLSQL Developer 是 Oracle 的客户端。 下面以64位破解版的PLSQL Developer为例,进行PLSQL Developer 安装讲解。 0. 下载 PLSQL Developer https://download.csdn.net/download/Shipley_Leo/87557938 1. 根据操作系统选择对应“plsqldev.exe”可执行文件&#xff…

虚拟平台中的“有意”/“无意”故障注入

构建虚拟平台的重点往往会放在系统运行,尤其是在汽车和航空航天的数字孪生领域。只有确保虚拟平台能够正常运行系统,软件才得以可靠地在虚拟平台上运行。 为确保系统正常运行,通常需要解决如何测试异常、故障和其他问题。该过程通常被称为“…

【Linux】vi和vim编辑器

目录主题主题 三种常见模式: 正常模式 以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用「复制、…

监控开源方案

监控开源方案可观测性指标监控日志监控链路追踪开源产品ZabbixOpen-FalconPrometheusNightingale监控需求 : 系统出现问题 , 能及时感知了解数据趋势,预测未来可能出问题了解系统的水位,为服务扩缩容提供数据支撑感知待优化点,如 : 中间件参…

【Unity VR开发】结合VRTK4.0:创建一个按钮(Togglr Button)

语录: 有人感激过你的善良吗,貌似他们只会得寸进尺。 前言: Toggle按钮是提供简单空间 UI 选项的另一种方式,在该选项中,按钮将保持其状态,直到再次单击它。这允许按钮处于激活状态或停用状态的情况&#…

固态存储设备固件升级方案

1. 前言 随着数字化时代的发展,数字数据的量越来越大,相应的数据存储的需求也越来越大,存储设备产业也是蓬勃发展。存储设备产业中,发展最为迅猛的则是固态存储(Solid State Storage,SSS)。数字化时代,海量…

【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】

目录【ESP32freeRTOS学习笔记】系列新的开篇ESP-IDF对FreeRTOS的适配ESP-IDF环境中使用FreeRTOS的差异性简介关于FreeRTOS的配置关于ESP-IDF FreeRTOS Applications结语【ESP32freeRTOS学习笔记】系列新的开篇 ESP-IDF对FreeRTOS的适配 FreeRTOS是一个可以适用于多个不同MCU开…

JavaWeb开发(三)3.6——代理模式

一、代理模式概述 1.1、代理模式的理解 参考人家的举例,感觉挺形象,容易理解: 就拿明星与经纪人的关系来说,明星就好比被代理类,明星只需要负责唱歌,表演或给粉丝签名等事务,而类似签合同&…