06数据分析(爬虫)

爬虫项目:图片

爬虫项目1——爬虫壁纸图片

import requests
from lxml import etree


"""
批量下载壁纸
"""

"""
实例1:获取了百度翻译的源码
实例2:通过xpath解析html文件
"""

# 小目标:拿到所有的图片名称
# 实战思路:
# 1、先拿到目标网页的全部源码
# 2、通过xpath解析,把我们想要的数据提取出来

# 请求url
target = 'https://pic.netbian.com/'
response = requests.get(url=target)
bytes_str_data = response.content
str_data = bytes_str_data.decode('gbk')

# 数据清洗
html_data = etree.HTML(str_data)
# 分析目标数据再哪一个标签里
# 提取标签# 提取标签的数据
img_list = html_data.xpath('//ul/li/a/span/img/@alt')
img_url_list = html_data.xpath('//ul/li/a/span/img/@src')
# print(img_url_list)

new_img = zip(img_list,img_url_list)

"""
为了更清楚使用list
new_img = list(new_img)  # new_img 进行list转换 list包含的是元组

for img in new_img:
    print(img[0],img[1])
"""


for img in new_img:
    img_url = 'https://pic.netbian.com/' + img[1]
    img_name = img[0]
    print(img_name)
    # print(img_name,img_url)
    #  请求img_url,获取jpg文件的 字节码 以字节写入的模式打开一个文件,再将字节写入该文件中,最后保存关闭文件
    img_response = requests.get(img_url)

    f =open(f'{img_name}.jpg',mode='wb') # mode 二进制写的模式
    f.write(img_response.content)
    f.close

# 问题1:在保存图片的时候,怎么保证图片名一样?
# 解决方法,使用我们清洗好的图片名
# 问题2:图片名 和 url 不在一个列表中,所有没办法一起循环,怎么解决?
# 解决方法:用zip压缩,zip 可以将长度相同的列表压缩为一个列表


# 总结:
# 爬虫实战思路
# 1、确定需求 :批量下载壁纸
# 2、分析网页 :'https://pic.netbian.com/'
# 3、请求源码 :response = requests.get(url=target)
# 4、解析数据 :html_data = etree.HTML(str_data)
# 5、保存数据 :f = open(f'{img_name}.jpg',mode'wb)


# 优化的点:
# 下载的图片是小图,怎么下载高清大图?
# 目前只下载1页,怎么批量下载多页?

爬虫项目2——批量删除图片

import os
from tqdm import tqdm  # 适用于任何循环语句

name = os.listdir()  # 获取当前所有的文件名称
for x in tqdm(name):
    if x.endswith('.jpg'):
        os.remove(x)

爬虫项目3——爬取多页壁纸大图

import requests
from lxml import etree
from tqdm import tqdm

""" 下载url内额图片 """
def down_img(target):
    response = requests.get(url=target)
    bytes_str_data = response.content
    str_data = bytes_str_data.decode('gbk')
    html_data = etree.HTML(str_data)

    a_list = html_data.xpath('//ul[@class="clearfix"]/li/a')

    for a in a_list:
        img_detail_url = 'https://pic.netbian.com' + a.xpath('@href')[0]

        img_detail_response = requests.get(img_detail_url)
        img_detail_data = img_detail_response.content
        detail_data = img_detail_data.decode('gbk')
        detail_html = etree.HTML(detail_data)

        big_img_url = detail_html.xpath('//a[@id="img"]/img/@src')
        big_img_name = detail_html.xpath('//a[@id="img"]/img/@alt')

        big_img_url = 'https://pic.netbian.com/' + big_img_url[0]
        img_response = requests.get(big_img_url)
        f =open(f'{big_img_name[0]}.jpg',mode='wb') # mode 二进制写的模式
        f.write(img_response.content)
        f.close()

# 待处理的url池
url_list = ['https://pic.netbian.com/',
       'https://pic.netbian.com/index_2.html',
       'https://pic.netbian.com/index_3.html']

# 批量下载连续变化的url页面图片
for page in tqdm(range(1,1180)):   # 第一页有问题,从第二页开始爬
    url = f'https://pic.netbian.com/index_{page}.html'
    down_img(url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值