Python爬虫爬取彼岸网4K Picture

深夜爬取4k图片

  • 下载流程
  1. 定义page_text函数,对第一页地址发送get请求,因为页面数据在页面源代码都能查到,所以发送get 请求就ok!,注意要进行编码格式设置,可以去源代码查看,
  2. 定义parse_data函数,利用xpath解析图片所对应的url,以及其名字,把解析到的数据都添加到列表中
  3. 定义downloadPic函数,先利用os模块,如果有这个目录就不创建,没有就创建,用for循环对刚才添加到列表中的数据(数据在datas中)进行遍历,取得名字,和地址,再对地址发起请求,这个是要下载图片,图片保存方式为二进制格式,所以这个的请求用content,最后用上下文管理器进行保存到目录中,注意:用了with 上下文管理器,最后我们就不必对文件进行关闭
  4. 主函数主要是传递一个url 参数page_text进行分页的操作
import requests, os
from lxml import etree

# UA伪装
headers = {
    'UserAgent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}


# 发送请求,获取网页源代码
def page_text(url):
    response = requests.get(url=url, headers=headers)
    response.encoding = "gbk"
    page_data = response.text
    parse_data(page_data)


# 解析数据
def parse_data(page_data):
    tree = etree.HTML(page_data)
    list_data_li = tree.xpath('//div[@class="slist"]/ul/li')
    # print(list_data)

    # 用来存放解析到的图片地址
    datas = []
    # 进行遍历列表
    for li in list_data_li:
        # 拼接完整的图片地址
        li_picture = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]
        #解析图片名字
        pic_name = li.xpath('./a/b/text()')[0]

        dic = {
            'title': pic_name,
            'url': li_picture
        }
        datas.append(dic)

    return downloadPic(datas)


# 下载图片,持久化存储
def downloadPic(datas):
    if not os.path.exists('./IMG'):
        os.mkdir('IMG')
    for i in datas:
        # 图片名字
        title = i['title']
        # 图片地址
        url = i['url']
        # print(url,title)
        response = requests.get(url=url, headers=headers)
        response.encoding = "gbk"
        # 由于是图片所以响应的应该是二进制格式
        page_content = response.content
        # 持久化存储
        with open('IMG/' + title + '.jpg', 'wb') as fp:

            print(f'正在下载:{title}.jpg')
            fp.write(page_content)
    print('下载完毕!')


if __name__ == "__main__":
    # 先搞定第一页的数据
    print('------------------正在准备下载第 1 页----------------"')
    page_text('https://pic.netbian.com/4kdongman/')
    # 实现分页操作,下载多页数据

    ensure =input('第一张页面已经下载完了,是否继续下载呢\n'
                    '继续请输入y,取消请输入n:')
    if ensure == 'y' or 'Y':
        page_num =int(input('您想要下载到第几页数呢:'))
        for i in range(2, page_num + 1):
            print("------------------正在准备下载第 %d 页----------------"%i)
            page_text('https://pic.netbian.com/4kdongman/index_{}.html'.format(i))
    else:
        print('您的服务到此结束')
        exit()

posted @ 2022-08-11 00:35  ExpiredSaury  阅读(236)  评论(0编辑  收藏  举报