怎么利用python实现查看溧阳的摄影圈
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇"怎么利用python实现查看溧阳的摄影圈"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2025年02月23日怎么利用python实现查看溧阳的摄影圈
这篇"怎么利用python实现查看溧阳的摄影圈"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"怎么利用python实现查看溧阳的摄影圈"文章吧。
目标站点分析
本次要采集的目标站点分页规则如下:
http://www.jsly001.com/thread-htm-fid-45-page-{页码}.html
代码采用多线程 threading 模块+requests 模块+BeautifulSoup 模块编写。
采取规则依据列表页 → 详情页:
溧阳摄影圈图片采集代码
本案例属于实操案例,先展示完整代码,然后基于注释与重点函数进行说明。
主要实现步骤如下所示:
设置日志输出级别
声明一个 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("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 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实现查看溧阳的摄影圈"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
图片
线程
溧阳
摄影
代码
内容
函数
数据
模块
主题
地址
属性
日志
标签
标题
级别
输出
全局
区域
实例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江西智能化网络技术管理系统
数据库查询打折后的图书价格
村游网络技术有限公司电话
网络技术 仿真软件
西班牙中国网络安全
衡阳软件开发定制公司
鄂州串口服务器报价
成都思维联动网络科技互联网
信通公司网络安全职责
渭南初中毕业5g软件开发培训
网络安全保护等级保护级别
共享资源数据库专家
软件工程与网络技术哪个好
数据库恢复的技术有
新炬网络技术有限公司老板娘
系统重装后出现没有连接服务器
视频聊天服务器租用
多对多关系 数据库表设计
软件开发假定和约束条件怎么写
网络技术面临的难题
google服务器地址
河南青桔网络技术有限公司拼多多
网络安全相关词语
内存数据库与缓存
赛默飞质谱的数据库是什么
it苹果软件开发
河北智慧社区软件开发系统
怎么管理软件开发人员
青白江网络安全
诺莫瑞根 服务器