iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用python实现查看溧阳的摄影圈
  • 501
分享到

利用python实现查看溧阳的摄影圈

2024-04-02 19:04:59 501人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录目标站点分析溧阳摄影圈图片采集代码前言: 本篇博客继续学习BeautifulSoup,目标站点选取“溧阳摄影圈”,这一地方论坛。 目标站点分析 本次要采集

前言:

本篇博客继续学习BeautifulSoup,目标站点选取“溧阳摄影圈”,这一地方论坛。

目标站点分析

本次要采集的目标站点分页规则如下:

Http://www.jsly001.com/thread-htm-fid-45-page-{页码}.html

代码采用多线程 threading 模块+requests 模块+BeautifulSoup 模块编写。

采取规则依据列表页 → 详情页:

溧阳摄影圈图片采集代码

本案例属于实操案例,先展示完整代码,然后基于注释与重点函数进行说明。

主要实现步骤如下所示:

  • 设置日志输出级别
  • 声明一个 LiYang 类,其继承自 threading.Thread
  • 实例化多线程对象
  • 每个线程都去获取全局资源
  • 调用html解析函数
  • 获取板块主题分割区域,主要为防止获取置顶的主题
  • 使用 lxml 进行解析
  • 解析出标题与数据
  • 解析图片地址
  • 保存图片
import random
import threading
import logging
from bs4 import BeautifulSoup
import requests
import lxml
logging.basicConfig(level=logging.NOTSET) # 设置日志输出级别
# 声明一个 LiYang 类,其继承自 threading.Thread
class LiYangThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self) # 实例化多线程对象
        self._headers = self._get_headers() # 随机获取 ua
        self._timeout = 5 # 设置超时时间

    # 每个线程都去获取全局资源
    def run(self):
        # while True: # 此处为多线程开启位置
        try:
            res = requests.get(url="http://www.jsly001.com/thread-htm-fid-45-page-1.html", headers=self._headers,
                               timeout=self._timeout) # 测试获取第一页数据
        except Exception as e:
            logging.error(e)
        if res is not None:
            html_text = res.text
            self._fORMat_html(html_text) # 调用html解析函数

    def _format_html(self, html):
        # 使用 lxml 进行解析
        soup = BeautifulSoup(html, 'lxml')

        # 获取板块主题分割区域,主要为防止获取置顶的主题
        part_tr = soup.find(attrs={'class': 'bbs_tr4'})

        if part_tr is not None:
            items = part_tr.find_all_next(attrs={"name": "readlink"}) # 获取详情页地址
        else:
            items = soup.find_all(attrs={"name": "readlink"})
        # 解析出标题与数据
        data = [(item.text, f'http://www.jsly001.com/{item["href"]}') for item in items]
        # 进入标题内页
        for name, url in data:
            self._get_imgs(name, url)

    def _get_imgs(self, name, url):
        """解析图片地址"""
        try:
            res = requests.get(url=url, headers=self._headers, timeout=self._timeout)
        except Exception as e:
            logging.error(e)
		# 图片提取逻辑
        if res is not None:
            soup = BeautifulSoup(res.text, 'lxml')
            origin_div1 = soup.find(attrs={'class': 'tpc_content'})
            origin_div2 = soup.find(attrs={'class': 'imgList'})
            content = origin_div2 if origin_div2 else origin_div1

            if content is not None:
                imgs = content.find_all('img')

                # print([img.get("src") for img in imgs])
                self._save_img(name, imgs) # 保存图片
    def _save_img(self, name, imgs):
        """保存图片"""
        for img in imgs:
            url = img.get("src")
            if url.find('http') < 0:
                continue
            # 寻找父标签中的 id 属性
            id_ = img.find_parent('span').get("id")

            try:
                res = requests.get(url=url, headers=self._headers, timeout=self._timeout)
            except Exception as e:
                logging.error(e)

            if res is not None:
                name = name.replace("/", "_")
                with open(f'./imgs/{name}_{id_}.jpg', "wb+") as f: # 注意在 python 运行时目录提前创建 imgs 文件夹
                    f.write(res.content)
    def _get_headers(self):
        uas = [
            "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",
        ]
        ua = random.choice(uas)
        headers = {
            "user-agent": ua
        }
        return headers
if __name__ == '__main__':
    my_thread = LiYangThread()
    my_thread.run()

本次案例采用中,BeautifulSoup 模块采用 lxml 解析器 对 HTML 数据进行解析,后续多采用此解析器,在使用前注意先导入 lxml 模块。

数据提取部分采用 soup.find() 与 soup.find_all() 两个函数进行,代码中还使用了 find_parent() 函数,用于采集父级标签中的 id 属性。

# 寻找父标签中的 id 属性
id_ = img.find_parent('span').get("id")

代码运行过程出现 DEBUG 信息,控制 logging 日志输出级别即可。![用Python看溧阳摄影圈,里面照片非常真

到此这篇关于利用python实现查看溧阳的摄影圈的文章就介绍到这了,更多相关python查看摄影圈内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用python实现查看溧阳的摄影圈

本文链接: https://www.lsjlt.com/news/118073.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用python实现查看溧阳的摄影圈
    目录目标站点分析溧阳摄影圈图片采集代码前言: 本篇博客继续学习BeautifulSoup,目标站点选取“溧阳摄影圈”,这一地方论坛。 目标站点分析 本次要采集...
    99+
    2024-04-02
  • 怎么利用python实现查看溧阳的摄影圈
    这篇“怎么利用python实现查看溧阳的摄影圈”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么利用python实现查看溧阳...
    99+
    2023-06-30
  • 利用JavaCV如何实现抓取并保存摄像头的影像
    今天就跟大家聊聊有关利用JavaCV如何实现抓取并保存摄像头的影像,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现:import java.awt.Graphics2D; impo...
    99+
    2023-05-31
    javacv ava
  • 利用Python实现电影订票系统
    目录一、效果展示二、整体结构图 三、代码分解3.1infos.py 3.2seat_book.py3.3film_selector.py3.4main....
    99+
    2024-04-02
  • python利用opencv调用摄像头实现目标检测
    目录使用到的库实现思路实现代码2020/4/26更新:FPS计算FPS记录的原理FPS实现代码使用到的库 好多人都想了解一下如何对摄像头进行调用,然后进行目标检测,于是我做了这个小B...
    99+
    2024-04-02
  • Qt利用ImageWatch实现图片查看功能
    使用Qt实现ImageWatch图片查看功能,图片放大可见RGB像素值。支持打开大图片,即打开一个几百MB甚至几GB的大图片。 1、什么是ImageWatch Visual Stud...
    99+
    2024-04-02
  • 利用Python实现好看的水波特效
    目录前言一、运行环境二、效果展示1)第一组随机风景图2)第二组人物随机图3)第三组真人图片三、代码展示前言 你的心要如溪水般柔软,你的眼波要像春天般明媚。  —...
    99+
    2024-04-02
  • 利用python实现万年历的查询
    今天要用python做一个小功能,那就是实现万年历的查询。 首先看一下整体感觉 实现代码: def is_leap_year(year): if year/4==0 an...
    99+
    2024-04-02
  • python 查看cpu的核数实现
    目录如何查看cpu的核数查看cpu的核心数、线程数方法一方法二如何查看cpu的核数 代码:  from multiprocessing import cpu_count  ...
    99+
    2024-04-02
  • Qt怎么利用ImageWatch实现图片查看功能
    本篇内容介绍了“Qt怎么利用ImageWatch实现图片查看功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是ImageWatchVi...
    99+
    2023-06-30
  • Python查看Tensor尺寸及查看数据类型的实现
    目录查看Tensor尺寸及查看数据类型Tensor尺寸查看数据类型查看Pytorch基本数据类型tensorPython和Pytorch数据类型对应创建tensor的方法一些常用的生...
    99+
    2024-04-02
  • 这么利用Python实现好看的水波特效
    这篇文章主要介绍“这么利用Python实现好看的水波特效”,在日常操作中,相信很多人在这么利用Python实现好看的水波特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”这么利用Python实现好看的水波特效...
    99+
    2023-06-30
  • 利用Python实现sqlite3增删改查的封装
    目录开发背景:特性:使用方法测试用例Python参数传递方式总结开发背景: 每次项目都要写数据库、烦死了。。然后就每次数据库都要花很多时间。烦死了!不如写个通用的增删查改,以不变应万...
    99+
    2024-04-02
  • Python GUI利用tkinter皮肤ttkbootstrap实现好看的窗口
    目录前言主题切换ttkbootstrap一些简单使用介绍标签按钮输入框文本框日期输入单选按钮多选按钮组合框Frame和Labelframe仪表进度条Scale水尺滚动条消息提示框查询...
    99+
    2024-04-02
  • 利用Matlab实现阴影柱状图的绘制
    目录示例图使用教程1.基本使用2.添加图例3.阴影格式4.特殊结构5.额外修饰工具函数完整代码封面图绘制代码阴影柱状图绘制的代码MATHWORKS上也有,不过是生成图片后,识别图像上...
    99+
    2024-04-02
  • PHP中怎么利用GTK实现一个文本查看器
    这期内容当中小编将会给大家带来有关PHP中怎么利用GTK实现一个文本查看器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP GTK写文本查看器代码示例:< php  &nbs...
    99+
    2023-06-17
  • MySQL查看所有用户的实现
    目录列出所有用户在mysql中查看用户的详细信息MySQL中如何查看当前用户列出所有用户 如下语句可以查询所有用户 SELECT user FROM 数据库的名字.user; 在这条语句中,我...
    99+
    2023-03-08
    MySQL查看所有用户 MySQL所有用户
  • Android应用中怎么实现利用图片路径查看图片
    Android应用中怎么实现利用图片路径查看图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.在项目清单中添加网络访问权限<!--访问网络的权限--> &l...
    99+
    2023-05-31
    android roi
  • 利用CSS实现元素的阴影效果的方法
    利用CSS实现元素的阴影效果的方法,需要具体代码示例在网页设计中,为元素添加阴影效果能够使页面更加生动、立体。利用CSS,我们可以通过简单的代码实现各种不同的阴影效果。本文将为大家介绍几种常见的实现元素阴影效果的方法,并给出具体的代码示例。...
    99+
    2023-11-21
    阴影效果 CSS阴影 元素阴影
  • 利用CSS实现元素的投影效果的方法
    利用CSS实现元素的投影效果的方法,需要具体代码示例在网页设计中,投影效果可以为页面元素增添立体感和层次感,使页面更加丰富和生动。CSS(层叠样式表)为实现投影效果提供了多种方法和属性。一、box-shadow属性box-shadow属性是...
    99+
    2023-11-21
    CSS投影效果
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作