本次爬取的目标是某网站4K高清小姐姐图片:
实现批量下载指定关键词的图片,存放到指定文件夹中:
Python:3.10
编辑器:PyCharm
第三方模块,自行安装:
pip install requests # 网页数据爬取
pip install lxml # 提取网页数据
爬虫使用代理IP的好处有以下几点:
博主经常写爬虫代码使用的是巨量IP家的高匿名代理IP,每天有1000个免费IP:点击免费试用
1、打开巨量IP官网:巨量IP官网
2、输入账号信息进行注册:
3、这里需要进行实名认证,如果不会的可以看:个人注册实名教程:
4、进入会员中心,点击领取今日免费IP:
5、详细步骤看官方的教程文档:巨量HTTP—免费代理ip套餐领取教程,领取后如下图:
6、点击产品管理》动态代理(包时),可以看到我们刚才领取到的免费IP信息:
7、将自己电脑的IP添加为白名单能获取代理IP,点击授权信息:
8、依次点击修改授权》快速添加》确定
9、添加完成后,点击生成提取链接:
10、设置每次提取的数量,点击生成链接,并复制链接:
11、将复制链接,复制到地址栏就可以看到我们获取到的代理IP了:
获取到图片链接后我们需要再次发送请求去下载图片,由于请求量一般会很大所以需要用到代理IP。上面我们已经手动获取到了代理IP,下面来看Python如何挂上代理IP发送请求:
1、通过爬虫去获取API接口的里面的代理IP(注意:下面代理URL,看4.2教程换成自己的API链接):
import requests
import time
import randomdef get_ip():url = "这里放你自己的API链接"while 1:try:r = (url, timeout=10)except:continueip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁')time.sleep(1)continuebreakproxies = {'https': '%s' % ip}return proxiesif __name__ == '__main__':proxies = get_ip()print(proxies)
运行结果,可以看到返回了接口中的代理IP:
2、接下来我们写爬虫代理的时候就可以挂上代理IP去发送请求了,只需要将proxies
当成参数传给<函数去请求其他网址:
(url, headers=headers, proxies=proxies)
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒
import os # 创建文件
首先我们来分析一下网站的翻页,一共有62页:
第一页链接:
.html
第二页链接:
.html
第三页链接:
.html
可以看出每页只有index
后面从第二页开始依次加上_页码
,所以用循环来构造所有网页链接:
if __name__ == '__main__':# 页码page_number = 1# 循环构建每页的链接for i in range(1,page_number+1):# 第一页固定,后面页数拼接if i ==1:url = '.html'else:url = f'{i}.html'
可以看到所有图片url都在 ul标签 > a标签 > img标签下:
我们创建一个get_imgurl_list(url)
函数传入网页链接获取 网页源码,用xpath定位到每个图片的链接:
def get_imgurl_list(url,imgurl_list):"""获取图片链接"""# 请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}# 发送请求response = (url=url, headers=headers)# 获取网页源码html_str = # 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath("//ul[@class='clearfix']/li")# 打印一下li标签个数看是否和一页的电影个数对得上print(len(li_list)) # 输出20,没有问题for li in li_list:imgurl = li.xpath(".//a/img/@src")[0]# 拼接urlimgurl = '' +imgurlprint(imgurl)# 写入列表imgurl_list.append(imgurl)
运行结果:
点开一个图片链接看看:
OK没问题!!!
图片链接有了,代理IP也有了,下面我们就可以下载图片。定义一个get_down_img(img_url_list)
函数,传入图片链接列表,然后遍历列表,每下载一个图片切换一次代理,将所有图片下载到指定文件夹:
def get_down_img(imgurl_list):# 在当前路径下生成存储图片的文件夹os.mkdir("小姐姐")# 定义图片编号n = 0for img_url in imgurl_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}# 调用get_ip函数,获取代理IPproxies = get_ip()# 每次发送请求换代理IP,获取图片,防止被封img_data = (url=img_url, headers=headers, proxies=proxies).content# 拼接图片存放地址和名字img_path = './小姐姐/' + str(n) + '.jpg'# 将图片写入指定位置with open(img_path, 'wb') as f:f.write(img_data)# 图片编号递增n = n + 1
这里我们可以设置需要爬取的页码:
if __name__ == '__main__':# 1. 设置获取的页数page_number = 63imgurl_list = [] # 用于存储所有的图片链接# 2. 循环构建每页的链接for i in range(1,page_number+1):# 第一页固定,后面页数拼接if i ==1:url = '.html'else:url = f'{i}.html'# 3. 获取图片链接get_imgurl_list(url,imgurl_list)# 4. 下载图片get_down_img(imgurl_list)
注意:下面代理URL,看4.2教程换成自己的API链接:
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒
import osdef get_ip():url = "这里放你自己的API链接"while 1:try:r = (url, timeout=10)except:continueip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁')time.sleep(1)continuebreakproxies = {'https': '%s' % ip}return proxiesdef get_imgurl_list(url,imgurl_list):"""获取图片链接"""# 请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}# 发送请求response = (url=url, headers=headers)# 获取网页源码html_str = # 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath("//ul[@class='clearfix']/li")# 打印一下li标签个数看是否和一页的电影个数对得上print(len(li_list)) # 输出20,没有问题for li in li_list:imgurl = li.xpath(".//a/img/@src")[0]# 拼接urlimgurl = '' +imgurlprint(imgurl)# 写入列表imgurl_list.append(imgurl)def get_down_img(imgurl_list):# 在当前路径下生成存储图片的文件夹os.mkdir("小姐姐")# 定义图片编号n = 0for img_url in imgurl_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}# 调用get_ip函数,获取代理IPproxies = get_ip()# 每次发送请求换代理IP,获取图片,防止被封img_data = (url=img_url, headers=headers, proxies=proxies).content# 拼接图片存放地址和名字img_path = './小姐姐/' + str(n) + '.jpg'# 将图片写入指定位置with open(img_path, 'wb') as f:f.write(img_data)# 图片编号递增n = n + 1if __name__ == '__main__':# 1. 设置获取的页数page_number = 50imgurl_list = [] # 用于存储所有的图片链接# 2. 循环构建每页的链接for i in range(1,page_number+1):# 第一页固定,后面页数拼接if i ==1:url = '.html'else:url = f'{i}.html'# 3. 获取图片链接get_imgurl_list(url,imgurl_list)# 4. 下载图片get_down_img(imgurl_list)
运行结果:
下载成功了没有报错,代理IP的质量还是不错的!!!
每天免费的1000个代理IP不够用怎么办?经常写爬虫代码对于代理IP需求量很大的小伙伴推荐使用巨量IP家的不限量代理IP套餐,IP有效时长:30-60秒就够用了:点击购买
这里默认有5个代理池子,单次最高提取50,提取1秒一次;如果单次提取1个,则可以实现1秒提取50次。如果觉得单次50个代理IP还不够的可以增加IP池子。
我算了一下默认的五个池子,1秒可以提取50个代理IP,一天86400秒,也就是说一天可以提取 50x86400=4,320,000个代理IP,好家伙于是博主我果断给自己安排了一个包年套餐,别提有多爽了:
代理IP对于爬虫是密不可分的,代理IP可以帮助爬虫隐藏真实IP地址,有需要代理IP的小伙伴可以试试巨量家的代理IP:巨量IP官网
本文发布于:2024-02-03 22:36:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170697116451476.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |