# -*- coding: utf-8 -*-
# !/usr/bin/env python
# 获取站长之家风景图:https://sc.chinaz.com/tupian/fengjingtupian.html,长时间爬取会出现图片响应超时的问题。
# 首先从第一页中获取第一页所有图片详情页链接和下一页的链接
# 对详情页就行解析下载,下载完毕请求下一页,并重复上一步操作,直到最后一页为止。
# 在下载图片前,先获取所有已下载的图片名字,如果存在则不下载import os, re, time
import requests
# 导入自定义随机请求头的包
from utils.header import get_uaclass Chinaz():def __init__(self):self.url = "https://sc.chinaz.com/tupian/fengjingtupian.html"self.base_url = "https://sc.chinaz.com/tupian/"self.img_file = "imgs"if not os.path.exists(self.img_file):os.makedirs(self.img_file)else:# 如果文件夹存在,则获取里面所有的文件名字,也有可能文件夹里什么都没有for root, dirs, files in os.walk(self.img_file):self.files= files# 专注于发送请求,并返回响应对象def get_html(self, url):resp = requests.get(url, headers={"User-Agent": get_ua()})resp.encoding = 'utf-8'if resp.status_code == 200:return resp# 获取所有图片网页地址和下一页链接def get_all(self, html):# 图片列表页的规则img_url_list_patt = re.compile(r'<p><a target="_blank" href="(.*?)" alt=".*?">')all_img_urls = img_url_list_patt.findall(html)all_img_urls = ["https:" + i for i in all_img_urls]# 图片详情页的规则img_url_patt = re.compile(r'<a href="(.*?)" title="(.*?)" class="image_gall">')for img_url in all_img_urls:img_html = self.get_html(img_url)if img_html:res_img_urls = img_url_patt.findall(img_html.text)res_img_url = "https:" + res_img_urls[0][0]res_img_title = res_img_urls[0][1]# 图片名字:江面风景唯美意境图片zzpic9603.jpgres_img_title += res_img_url.split("/")[-1]# 如果文件夹为空或者图片名字不存在则下载if not self.files or self.img_exist(res_img_title):try:self.download_img(res_img_url, res_img_title)except Exception as e:print("%s,该图片下载失败,跳过,出错原因:%s" % (res_img_title,e))continueelse:print("该图片已存在,无需下载:%s" % res_img_title)# 图片列表页获取下一页规则next_patt = re.compile(r'(fengjing.*?)"\s+class="nextpage">下一页</a>')next_page = next_patt.findall(html)try:next_page = self.base_url + next_page[0].split('"')[-1]print("即将处理链接:", next_page)resp = self.get_html(next_page)if resp:self.get_all(resp.text)except IndexError:print("没有下一页了!")except Exception as e:print("出错了:", e)# 获取图片地址并下载def download_img(self, img_url, res_img_title):time.sleep(1)print("下载图片:", res_img_title)resp = self.get_html(img_url)if resp:with open(self.img_file + "/" + res_img_title, 'wb')as f:f.write(resp.content)else:print("%s下载图片失败,忽略~" % res_img_title)# 下载图片之前先判断,即将要下载的图片名字是否存在,如果存在则不再下载def img_exist(self, res_img_title):if res_img_title not in self.files:return True# for root, dirs, files in os.walk(self.img_file):#     if res_img_title not in files:#         return Trueif __name__ == '__main__':cz = Chinaz()html = cz.get_html(cz.url)cz.get_all(html.text)
get_ua请求头可以自己随机设置一个,或者参考:https://blog.csdn.net/z564359805/article/details/111354241

python正则获取站长之家风景图,保存到本地相关推荐

  1. python获取站长之家素材

    python获取站长之家素材 本文以获取站长之家动物图片为例,演示了请求对象的定制. import urllib.request as ur import os from lxml import et ...

  2. php如何接收ap端上传的图片_用php获取远程图片并把它保存到本地的代码

    用php获取远程图片并把它保存到本地的代码 更新时间:2008年04月07日 20:43:26   作者: Function: 获取远程图片并把它保存到本地 确定您有把文件写入本地服务器的权限变量说明 ...

  3. php 无法获取远程图片,本地连接受限制或无法连接 用php获取远程图片并把它保存到本地的代码...

    function GrabImage($url,$filename="") { if($url==""):return false;endif; if($fil ...

  4. JAVA快速获取网络图片或者URL图片并保存到本地

    JAVA快速获取网络图片或者URL图片并保存到本地,直接上代码: import java.io.ByteArrayOutputStream; import java.io.File; import j ...

  5. python爬虫,站长之家

    主要目标 爬取下图信息,上图更简单直观. 分析思路 首先找到我们要得数据在那,我们先去站长之家去看看;站长之家 这里的"全部行业"就是我们要得一级分类,我们来研究一下他的html源 ...

  6. Python下载微信公众号文章和图片保存至本地

    思路 获取到微信公众号的文章之后,使用 BeautifulSoup 和正则表达式 解析出文章标题和包含正文的html. 获取到html之后,用正则表达式获取图片下载链接,下载成功后将微信的链接替换成本 ...

  7. python正则获取豆瓣排行250

    1.添加请求头,防止被拦截 dic = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleW ...

  8. python正则获取网页标签里面的内容

    # -*- coding:utf-8 -*- import re str = "<option value=2018010401>2018级播音与主持艺术1班</optio ...

  9. Python:opencv库实现调用摄像头拍照并保存到本地

    导入 opencv-python库,复制代码即可运行 import cv2def picture_shoot(image_name='img.png', image_path=r'E:/') -> ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task15. 有效的括号
  2. Android之如何以最简单方式开启闪光灯
  3. 小技巧:让linux程序在后台运行
  4. 菜鸟学习数据科学家 5 大误区
  5. Nonblocking I/O 与 Asynchronous I/O
  6. Android笔记-雷电模拟器(Android5.1.1)安装Xposed
  7. (数据库系统概论|王珊)第一章绪论-第三节:数据库系统的结构
  8. 图像主观质量评价 评分_图像质量分析工具哪家强?
  9. MYSQL----(3)SQL 基本操作
  10. JavaScript 函数(方法)的封装技巧要领及其重要性
  11. 基于FreeFEM++的有限元编程--2
  12. html5图片高斯模糊,CSS实现图片高斯模糊但边界清楚的效果
  13. 编译选项默认关闭adb RSA指纹认证
  14. axios封装需要注意的增删改查传参易混淆点
  15. 北邮计算机通信网第一阶段作业,北邮计算机通信网阶段作业.doc
  16. (145)光线追踪距离场柔和阴影
  17. html+css 制作小米商城主体内容的商品展示
  18. Linux系统软件工程师/嵌入式Linux应用开发工程师 知识体系构建 500篇(持续更新)
  19. AL遮天传 DL-深度学习模型的训练技巧
  20. 老友记剧本台词全十季下载

热门文章

  1. oracle10g可视化界面,GUI图形化界面工具
  2. Wireshark简介
  3. 前端资源(css,js,图片,接口等)加载过程
  4. pytorch 自定义卷积核进行卷积--卷积核订制
  5. Dubbo之Activate
  6. python最强表白神器_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
  7. Java实现 LeetCode 173 二叉搜索树迭代器
  8. 【NodeJS】nodejs | 缓存设置
  9. centos7+sendmail+dovecot配置邮件服务
  10. 一致性(Consistency)介绍