ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python爬虫爬取彼岸网4K Picture

2022-08-11 01:02:44  阅读:216  来源: 互联网

标签:Picture Python text li 爬取 url print data page


深夜爬取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()

标签:Picture,Python,text,li,爬取,url,print,data,page
来源: https://www.cnblogs.com/saury/p/16574462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有