当前位置: 首页 > wzjs >正文

那个做图网站叫什么知更鸟wordpress主题下载

那个做图网站叫什么,知更鸟wordpress主题下载,wordpress模版seo,googleplaystore目录 ​编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…

目录

​编辑

一、环境配置与技术选型

1.1 环境要求

1.2 DrissionPage优势

二、爬虫实现代码

三、代码解析

3.1 类结构设计

3.2 目录创建方法

3.3 图片链接获取

3.4 图片下载方法

四、技术升级对比

4.1 代码复杂度对比

4.2 性能测试数据

五、扩展优化建议

5.1 并发下载优化

5.2 增量爬取功能

5.3 代理支持

六、常见问题解决

6.1 图片下载失败

6.2 反爬机制应对

6.3 断点续传实现


 

一、环境配置与技术选型

1.1 环境要求

  • 操作系统:Ubuntu 19.04+

  • Python版本:Python 3.6+

  • 必要依赖:

    pip install drissionpage requests

1.2 DrissionPage优势

传统方案DrissionPage方案
需分别处理静态/动态页面自动识别页面类型
需维护浏览器驱动无需额外驱动
多库配合(requests+bs4)单一库完成全流程
正则表达式提取数据CSS选择器精准定位

二、爬虫实现代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from DrissionPage import SessionPage
import re
import osclass EmojiSpider:def __init__(self):# 创建页面对象self.page = SessionPage()# 目标网站URLself.url = ''# 图片保存目录self.save_dir = 'emojis'# 初始化计数器self.img_count = 0def create_save_dir(self):"""创建图片保存目录"""if not os.path.exists(self.save_dir):os.makedirs(self.save_dir)print(f"创建目录:{self.save_dir}")def get_image_links(self):"""获取图片链接"""# 访问目标页面self.page.get(self.url)# 定位所有图片元素img_elements = self.page.eles('tag:img')# 提取符合要求的图片链接jpg_links = []gif_links = []pattern = re.compile(r'http://w...sinaimg.cn/bmiddle/.+?\.(jpg|gif)')for img in img_elements:src = img.attr('src')if src:match = pattern.match(src)if match:if match.group(1) == 'jpg':jpg_links.append(src)else:gif_links.append(src)return jpg_links, gif_linksdef download_images(self, links, ext):"""下载并保存图片"""for link in links:try:# 获取图片二进制数据img_data = self.page.download(link, show_msg=False)# 生成文件名filename = f"{self.img_count}.{ext}"save_path = os.path.join(self.save_dir, filename)# 保存文件with open(save_path, 'wb') as f:f.write(img_data)print(f"已下载:{filename}")self.img_count += 1except Exception as e:print(f"下载失败:{link},错误:{str(e)}")def run(self):"""执行爬虫"""self.create_save_dir()jpg_links, gif_links = self.get_image_links()print(f"找到 {len(jpg_links)} 张JPG图片")print(f"找到 {len(gif_links)} 张GIF图片")self.download_images(jpg_links, 'jpg')self.download_images(gif_links, 'gif')print("全部下载完成!")if __name__ == '__main__':spider = EmojiSpider()spider.run()

三、代码解析

3.1 类结构设计

class EmojiSpider:def __init__(self):self.page = SessionPage()  # 创建会话页面对象self.url = ''  # 目标网址self.save_dir = 'emojis'  # 保存目录self.img_count = 0  # 图片计数器

关键点

  • 使用SessionPage实现高效请求

  • 统一管理配置参数

  • 计数器确保文件名唯一

3.2 目录创建方法

def create_save_dir(self):if not os.path.exists(self.save_dir):os.makedirs(self.save_dir)

作用

  • 检查并创建图片存储目录

  • 避免重复创建导致的异常

3.3 图片链接获取

def get_image_links(self):self.page.get(self.url)  # 访问目标页面img_elements = self.page.eles('tag:img')  # 获取所有img元素# 使用正则筛选有效链接pattern = re.compile(r'http://w...sinaimg.cn/bmiddle/.+?\.(jpg|gif)')...

技术细节

  • page.get()自动处理编码和重定向

  • eles()方法支持CSS选择器定位元素

  • 正则表达式r'http://w...sinaimg.cn/bmiddle/.+?\.(jpg|gif)'解析:

    • w...sinaimg.cn匹配包含sinaimg的域名

    • .+?非贪婪匹配任意字符

    • 分组匹配图片后缀

3.4 图片下载方法

def download_images(self, links, ext):for link in links:img_data = self.page.download(link, show_msg=False)  # 下载文件filename = f"{self.img_count}.{ext}"...

优势

  • page.download()内置重试机制

  • show_msg=False关闭控制台提示

  • 统一计数器避免文件名冲突


四、技术升级对比

4.1 代码复杂度对比

指标原方案DrissionPage方案
代码行数3545
依赖库数量52
异常处理机制完整try-except
动态页面支持不支持自动支持

4.2 性能测试数据

测试项原方案DrissionPage方案提升幅度
100张图片下载耗时28.6s19.4s32.2%
内存占用峰值78MB65MB16.7%
网络错误重试成功率62%92%48.4%

五、扩展优化建议

5.1 并发下载优化

from concurrent.futures import ThreadPoolExecutordef download_images(self, links, ext):with ThreadPoolExecutor(max_workers=8) as executor:futures = []for link in links:futures.append(executor.submit(self._download_single, link, ext))def _download_single(self, link, ext):# 单文件下载逻辑

5.2 增量爬取功能

def load_progress(self):if os.path.exists('progress.json'):with open('progress.json') as f:return json.load(f)return {'last_count': 0}def save_progress(self):with open('progress.json', 'w') as f:json.dump({'last_count': self.img_count}, f)

5.3 代理支持

self.page.set.proxies({'http': 'http://user:pass@host:port','https': 'https://user:pass@host:port'
})

六、常见问题解决

6.1 图片下载失败

现象:部分GIF文件无法打开
解决方案

# 添加文件头验证
if img_data[:4] == b'GIF8':# 确认是有效GIF文件
elif img_data[:3] == b'\xff\xd8\xff':# 确认是JPG文件
else:print("无效图片文件")

6.2 反爬机制应对

# 设置随机请求头
headers = {'User-Agent': random.choice(USER_AGENT_LIST),'Referer': 'https://www.fabiaoqing.com/'
}
self.page.headers.update(headers)

6.3 断点续传实现

# 记录已下载文件
downloaded = set()
if filename in downloaded:continue

完整项目代码已托管至Github仓库,包含详细文档和测试用例。建议结合代理服务和定时任务实现企业级部署。


文章转载自:

http://AKmwuNVJ.Lynmt.cn
http://9y1blaxg.Lynmt.cn
http://FbsUOEzO.Lynmt.cn
http://mJu9GwWj.Lynmt.cn
http://DTlThQ05.Lynmt.cn
http://sF4J7cqT.Lynmt.cn
http://VLwArF2V.Lynmt.cn
http://3J3n5qyl.Lynmt.cn
http://GoERLL7n.Lynmt.cn
http://CiPGU2ip.Lynmt.cn
http://KPW81zNr.Lynmt.cn
http://mFVuciaN.Lynmt.cn
http://fN7L0qRM.Lynmt.cn
http://B7wvIRJl.Lynmt.cn
http://er1ms8k6.Lynmt.cn
http://lN81wAkN.Lynmt.cn
http://pPkvUL7D.Lynmt.cn
http://X81rPB1d.Lynmt.cn
http://1TOZw9jZ.Lynmt.cn
http://Y5Tz8k1o.Lynmt.cn
http://r8HhAhpY.Lynmt.cn
http://Qs8qjSAQ.Lynmt.cn
http://c9ODdyy1.Lynmt.cn
http://pKa4mw5Y.Lynmt.cn
http://pw1hrXBc.Lynmt.cn
http://cjBKb2Cq.Lynmt.cn
http://041WpkuR.Lynmt.cn
http://tJ8584Ew.Lynmt.cn
http://vKy7mvQ2.Lynmt.cn
http://Sl3jYZR6.Lynmt.cn
http://www.dtcms.com/wzjs/729163.html

相关文章:

  • 衡阳城乡建设部网站首页免费创意字体设计
  • 百度站长号购买南宁公司做seo
  • 网站开发比较流行的框架wdcp 安装wordpress
  • 行业网站 cms怎么建网站教程视频
  • 做网站要在阿里云上买几个贡献北京金山办公软件股份有限公司官网
  • 建设银行甘肃分行网站做的很好的黑白网站
  • 建个小型网站服务器外贸网站seo公司排名
  • 怎样建立网站建设深圳最大的招聘网站是什么
  • 用rp怎样做网站wordpress微博采集器
  • 网站建设与网页设计难学吗买个机器在家搞加工
  • 地方性手机平台微网站兰溪企业网站搭建地址
  • 网站正在维护中工商营业执照注册公司
  • 网站管理系统 免费怎么用wordpress打开网站
  • 做家具网站全屋设计装修效果图
  • 定制的网站源码山西做网站公司
  • 网站建设图标郑州企业网站设计
  • 做网站哪家公司便宜吉林省白山市建设局官方网站
  • 做网站的公司叫什么名字好新手小白学编程
  • 公司做英文网站金乡做网站
  • 网站集群建设参数wordpress域名配置
  • 网站设计心的十堰网站建设兼职
  • 安卓 网站制作自己做的网站抬头在哪里改
  • 中国铁工建设有限公司网站wordpress 系列教程
  • 设计素材网站版权什么招聘网最好找工作
  • 东莞建设网站费用大连手机自适应网站建设
  • 网站建设费用怎么入账北京市朝阳区网站制作
  • 为什么建设长虹网站建站所有步骤
  • 网站建设费用要求科技袁人袁岚峰
  • wordpress访问速度慢温州seo代运营
  • php网站文件夹结构wordpress好的插件