re爬取糗图

import urllib.request
import re
import os
import time

# 输入起始页码和结束页码
start_page = int(input('请输入起始页码-'))
end_page = int(input('请输入结束页码-'))
#https://www.qiushibaike.com/pic/page/2/
url = 'https://www.qiushibaike.com/pic/page/{}/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}

# 搞一个循环,依次下载每一页的所有图片
for page in range(start_page, end_page + 1):
    print('正在爬取第--%s--页......' % page)
    # 拼接url
    urlt = url.format(page)
    # 构建请求对象
    request = urllib.request.Request(url=urlt, headers=headers)
    # 发送请求,得到响应
    response = urllib.request.urlopen(request)
    print(response)  #<http.client.HTTPResponse object at 0x0000000002ABADD8>

    # 得到网页字符串格式内容
    content = response.read().decode('utf8')

    # 写一个正则表达式,提取里面所有的图片链接
    # pattern = re.compile(r'<img src="(.*?)" alt="(.*?)">')
    # 这样写不对,接着修改,先找所有的div class="thumb"
    # pattern = re.compile(r'<div class="thumb">.*?</div>', re.S)
    # 接着细化,得到里面的img的src属性

#     < div class ="thumb" >< a href = "/article/121275861" target = "_blank" >< img src = "//pic.qiushibaike.com/system/pictures/12127/121275861/medium/2XPCMHUBH8F154RX.jpg" alt = "人生实在是大起大落" ></a>
# </div>

    pattern = re.compile(r'<div class="thumb">.*?<img src="(.*?)" alt="(.*?)" />.*?</div>', re.S)
    ret = pattern.findall(content)
    # print(ret)

    # 遍历这个列表,依次下载每个图片
    for info in ret:
        # 取出图片的地址
        image_url = 'https:' + info[0]
        # 取出图片的名字
        image_name = info[1]
        # print(image_name)
        # 拼接文件的名字
        filename = image_name + '.' + image_url.split('.')[-1]
        print('正在下载--%s--...' % filename)
        dirname = 'qiutu'
        filepath = os.path.join(dirname, filename)
        # 下载图片
        urllib.request.urlretrieve(image_url, filepath)
        print('结束下载--%s--' % filename)
        time.sleep(2)
    print('结束爬取第--%s--页...' % page)
    time.sleep(2)

# 单行模式  注意提取字符串里面内容有换行  re.S     否则返回可能为空

# .*? 不需要,匹配走        (.*?)保留

#注意右击检查中的代码可能与源码中的代码不同,
 导致匹配错误,某个标签可能会有 /符号,而检查中没有 /符号


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章