我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这篇“怎么利用python实现查看溧阳的摄影圈”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么利用python实现查看溧阳的摄影圈”文章吧。

目标站点分析

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

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

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

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

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

溧阳摄影圈图片采集代码

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

主要实现步骤如下所示:

  • 设置日志输出级别

  • 声明一个 LiYang 类,其继承自 threading.Thread

  • 实例化多线程对象

  • 每个线程都去获取全局资源

  • 调用html解析函数

  • 获取板块主题分割区域,主要为防止获取置顶的主题

  • 使用 lxml 进行解析

  • 解析出标题与数据

  • 解析图片地址

  • 保存图片

import randomimport threadingimport loggingfrom bs4 import BeautifulSoupimport requestsimport lxmllogging.basicConfig(level=logging.NOTSET) # 设置日志输出级别# 声明一个 LiYang 类,其继承自 threading.Threadclass 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("class="lazy" data-src") for img in imgs])                self._save_img(name, imgs) # 保存图片    def _save_img(self, name, imgs):        """保存图片"""        for img in imgs:            url = img.get("class="lazy" data-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 headersif __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实现查看溧阳的摄影圈”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

这篇“怎么利用python实现查看溧阳的摄影圈”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么利用python实现查看溧阳
2023-06-30

Python GUI怎么利用tkinter皮肤ttkbootstrap实现好看的窗口

这篇文章主要介绍“Python GUI怎么利用tkinter皮肤ttkbootstrap实现好看的窗口”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python GUI怎么利用tkinter皮肤tt
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录