# -*- 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. 禁用计算机服务LanmanServer,计算机关闭默认共享C$D$E$F$ADMIN$IPC$的方法
  2. C++类模板特化全总结
  3. java中对map使用entrySet循环
  4. Mr.J---重拾Ajax(四)-- 跨域
  5. Flutter进阶—使用自定义字体
  6. bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果(DP)
  7. windows Git Gui 汉化
  8. Oracle 11g 扩展UNDO表空间
  9. linux解决笔记本pwm背光,担心PWM调光屏幕闪瞎眼?联想这些ThinkPad笔记本要注意...
  10. Qt实现QQ截图中的马赛克效果
  11. 神舟战神ZX9 2022款怎么样
  12. Codefoeces 581B Luxurious Houses
  13. 自控力读书笔记:第二章 意志力的本能:人生来就能地址奶酪蛋糕的诱惑
  14. 【八】【vlc-android】vlc-vout视频流输出端源码分析
  15. 常用通信协议——IIC协议编程实现
  16. SORT跟踪算法的详细解释,不容错过
  17. CTF-攻防世界web新手入门篇
  18. 关于基金的各种名词含义及来源,小白如何入门基金
  19. 极验第四代滑块验证码破解(二):滑块缺口识别
  20. VC++使用画刷绘图 简单画刷 FillRect函数 位图画刷 透明画刷

热门文章

  1. Discrete VS Continuous Control
  2. SQL语言中,一个有灵魂的数字 :1
  3. 如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai
  4. 用 PyQt 打造具有专业外观的 GUI
  5. ts中的implements
  6. 当代年轻人超半数人为“单身贵族”,数据可视化教你如何应付春节相亲
  7. web网页设计实例作业 ——中国风的茶文化(4页) web课程设计-HTML网页制作代码
  8. [经典]Python 一篇学会多线程
  9. 计算机控制系统三种主机,计算机控制系统a试卷带答案.doc
  10. 建筑建材行业S2B2B电商平台一站式产品供销,助力企业提质增效