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

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('访问异常,请重试')
posted @ 2019-01-24 00:26  微雨丶  阅读(152)  评论(0编辑  收藏  举报