Reptile:requests + re 实现糗事百科糗图栏目图片下载

news/2024/7/19 12:25:21 标签: 爬虫

2019/1/24 晚上路飞学城的爬虫课程,图片下载:

通过requests + re下载糗事百科商的图片

re表达式理解的不是很清楚,只能模糊理解,.*?是匹配全部的数据,.表示任意单个字符不包括换行符,*表示前面一个字符重复任意次,?表示签一个字符出现0次或者1次。

以下为代码:

# 数据解析:
# 1.指定url
# 2.发起请求
# 3.获取页面数据
# 4.进行数据解析
# 5.数据持久化存储

# 三种解析的方式:
# 1.正则表达式解析
# 2.bs4 解析
# 3.xpath 解析

# 需求:下载糗事百科糗图页面的的图片,并存储到本地,尝试实现多页数据下载

import requests
import re
import os

# 先在当前目录下穿件一个保存图片的文件
if not os.path.exists('./images'):
os.mkdir('images')

# 指定要爬取的url和请求头信息

# 实现多页数据获取
start_page = int(input('Enter a start page:>>>'))
end_page = int(input("Enter a end page:>>>"))
for i in range(start_page,end_page+1,1):
url = 'https://www.qiushibaike.com/pic/page/' + str(i) # 最开始打开的url是没有page的,只有点到第二页及以后才会有page,刚开始没有注意到就直接用初始的url加上页码范围,
                                    # 发现下载的还是第一页的数据,后面又去看了一下才搞定,一定得注意
    headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/65.0.3325.181 Safari/537.36'
}

# 发起请求并获取返回数据
reponse = requests.get(url=url, headers=headers)
page_text = reponse.text
print(url)
# 对获取的页面数据进行解析
# <div class="thumb">
#
# <a href="/article/121465405" target="_blank">
# <img src="//pic.qiushibaike.com/system/pictures/12146/121465405/medium/HFBFXVWV4LKZB5QK.jpg" alt="大冬天给我送吃的是外卖小哥">
# </a>
#
# </div> 这里是糗事百科图片的网页存储结构,图片的url就是通过re从上面提取出来的
# 先判断一下请求的状态码是不是200,如果不是就提醒一下

if reponse.status_code == 200:
img_list = re.findall('<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>',page_text,re.S)
for img_url in img_list:
img_url = 'https:' + img_url # 将获取到的图片URL加上https的协议头,前面获取的URL是不完整的
# 对完整的URL发起get请求
img_code = requests.get(url=img_url, headers=headers).content # 获取二进制的图片数据,而不是文本数据

# 对获取的二进制数据进行存储
#print(img_list.split('/')[-1])
imgName = img_url.split('/')[-1].strip()
#print(imgName)
imgPath = 'images/' + imgName
with open(imgPath, 'wb') as fp:
fp.write(img_code)
print("%s \033[31m写入完成\033[m"%imgName)
else:
print('访问异常,请重试')

转载于:https://www.cnblogs.com/wei-yu/p/10312186.html


http://www.niftyadmin.cn/n/911036.html

相关文章

调试Javascript代码(浏览器F12)

在浏览器中按F12&#xff0c;会弹出一个窗口&#xff0c;这个窗口是给开发人员用于网站调试用的&#xff0c;可以分析网页的问题出现在哪里&#xff0c;同时可以调试多种脚本&#xff0c;是一个开发者工具。 想通过encodeURIComponent将C24\Category\TEST Xiao编码成C24%255CCa…

合并矩阵numpy_pandas 和 numpy 学习记录

学习python也有一段时间了&#xff0c;之前一直在忙&#xff0c;也一直没时间整理自己的学习记录&#xff0c;这几天自己挤出了一点时间&#xff0c;整理了一些自己的学习记录也希望自己能继续学习下去&#xff0c;也算是督促自己吧&#xff01;在这个学习的过程&#xff0c;自…

HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box

HTML5塔防游戏——《三国塔防》 游戏介绍&#xff1a; 《三国塔防》是一款基于HTML5和Javascript的2D塔防游戏。游戏中除了塔防游戏中原本的一些基本功能&#xff0c;还加入了武将单挑&#xff0c;使游戏更有趣味性。同时&#xff0c;游戏中的武将也有自己的绝招&#xff0c;使…

[APIO2014]回文串

本博客是写给那些没学过SAM&#xff08;因为博主自己也没学过&#xff09;&#xff0c;想用Manacher后缀数组做这道题的人的 题目大意 定义一个子串的价值为它在原串中出现的次数与它的长度的乘积&#xff0c;求最大回文子串的价值 思路 首先我们上一个马拉车&#xff0c;求出所…

asp.net core 系列 16 Web主机 IWebHostBuilder

asp.net core 系列 16 Web主机 IWebHostBuilder 原文:asp.net core 系列 16 Web主机 IWebHostBuilder一.概述 在asp.net core中&#xff0c;Host主机负责应用程序启动和生存期管理。host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder)。Web 主机是适用于托管 Web …

coreldraw x4曲线成长度_数字PCR新方法测量端粒长度

新加坡国立大学的研究人员设计了一种名为单端粒绝对长度快速分析(STAR)的新方法&#xff0c;能够快速测量端粒的绝对长度。图1. STAR分析的流程(图片来自原文)端粒长度的异常往往与多种衰老相关疾病有关&#xff0c;比如糖尿病、神经退行性疾病和心血管疾病&#xff0c;还与多种…

Hibernate4初始化sessionFactory 随笔

配置Hibernate的方法基本不变。 在hibernate4.*前&#xff0c;初始化SessionFactory的方法为&#xff1a; Configuration cf new Configuration(); cf.configure(); cf.buildSessionFactory(); 这样即可&#xff0c;在hibernate4后 cf.buildSessionFactory(); 这个方法被废弃&…

html5移动端长按图片就能保存图片

移动端长按图片就能保存图片转载于:https://www.cnblogs.com/yangwan/p/10327354.html