爬虫项目:图片
爬虫项目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)