一、爬取目标
在日常生活或工作中,我们用的最多的就是手机,一个养眼的壁纸能让人心情愉悦(狗头保命),手动一个个下载壁纸显然是非常繁琐且耗时的。因此,本文将介绍如何使用 Python 爬虫技术批量下载好看的壁纸(网站地址:http://www.netbian.com/shouji/meinv/index.htm):
二、为什么要使用代理?
使用代理 IP 可以带来以下好处:
由于我们需要批量下载壁纸为了能安全快速的采集,所以就需要使用到代理 IP,博主这里使用的是亮数据家的代理 IP,体验下来的感受有几点:
1、响应速度快,代理质量高
2、<font color=red size=3>注册新用户,可以获得 2+5 共 7 美金免费试用产品的机会,简直特别香
三、数据采集实战
3.1 代码获取代理 IP
1、首先打开官网,点击注册: 亮数据官网
2、填写信息:
3、填写完上图中的注册页面信息,点击“新建账户”提交后,网页会显示(如下图)- 验证邮件已发送至注册邮箱:
4、很快就可以在注册邮箱里(如下图),找到一封名为“Bright Data - Welcome”的验证邮件,点击登录,即可直接进入产品界面,开始使用。此时完成所有注册步骤均已完成:
5、注册登录后,选择查看代理 IP 产品:
6、有动态 IP、静态 IP、机房 IP、移动代理 IP 可以选择,博主这里选择是机房 IP:
7、配置通道,可以设置 IP 类型(共享/独享)、IP 数、IP 来源国家等等:
8、配置完成后可以看到主机、用户名和密码,等下我们添加到代码中去获取 IP:
9、下面代码只需要修改刚才获取到的主机、用户名和密码,即可返回代理 IP:
import requests # python基础爬虫库
def get_ip():
"""获取亮数据代理IP"""
host = '你的主机' # 主机
user_name = '你的用户名' # 用户名
password = '你的密码' # 密码
proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址
proxies = {
'http':proxy_url,
'https':proxy_url
}
url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改)
response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP
# print('代理IP详情信息:',response)
response_dict = eval(response) # 将字符串转为字典,方便我们提取代理IP
ip = response_dict['ip']
# print('IP:',ip)
return ip
get_ip()
复制代码
成功返回 IP 获取成功:
3.2 导入模块
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒
import os # 创建文件
复制代码
3.3 设置翻页
首先我们来分析一下网站的翻页,一共有 69 页:
分析翻页逻辑,可以看到只有后缀在变化:
第一页:
http://www.netbian.com/shouji/meinv/index.htm
复制代码
第二页:
http://www.netbian.com/shouji/meinv/index_2.htm
复制代码
第三页:
http://www.netbian.com/shouji/meinv/index_3.htm
复制代码
所以代码从第二页后面的后缀进行拼接:
if __name__ == '__main__':
# 设置需要爬取页数
page_number = 69
# 循环构建每页的链接
for page in range(1,page_number+1):
# 页数拼接
if page == 1:
url = 'http://www.netbian.com/shouji/meinv/index.htm'
else:
url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm'
print(url)
复制代码
3.4 获取图片链接
可以看到所有图片 url 都在 ul 标签 > li 标签 > 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 = requests.get(url=url, headers=headers)
# 获取网页源码
html_str = response.text
# 将html字符串转换为etree对象方便后面使用xpath进行解析
html_data = etree.HTML(html_str)
# 利用xpath取到所有的li标签
li_list = html_data.xpath("//div[@class='list list-phone']/ul/li")
# 打印一下li标签个数看是否和一页的电影个数对得上
print(len(li_list)) # 输出20,没有问题
for li in li_list:
imgurl = li.xpath(".//a/img/@src")[0]
print(imgurl)
# 写入列表
imgurl_list.append(imgurl)
复制代码
运行结果,成功拿到所有图片链接:
3.5 下载图片
图片链接有了,定义一个 get_down_img(img_url_list)函数,传入图片链接列表,然后遍历列表,利用 get_ip()函数获取代码 IP 每次请求都切换 IP 保证安全稳定的下载,将所有图片下载到指定文件夹:
def get_down_img(imgurl_list):
# 在当前路径下生成存储图片的文件夹
os.mkdir("小姐姐")
# 定义图片编号
n = 0
for 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'}
# 添加代理IP(这里代理IP这里需要看`3.1 免费获取代理IP`自己去获取)
proxies = get_ip()
# 每次发送请求,获取图片
img_data = requests.get(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
复制代码
3.6 调用主函数
这里我们可以设置修改爬取的页码:
if __name__ == '__main__':
page_number = 5 # 设置需要爬取页数
imgurl_list = [] # 保存所有图片链接
# 1、循环构建每页的链接
for page in range(1,page_number+1):
# 页数拼接
if page == 1:
url = 'http://www.netbian.com/shouji/meinv/index.htm'
else:
url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm'
print('网站页数链接', url)
# 2、获取图片链接
get_imgurl_list(url, imgurl_list)
# 3、下载图片到指定文件夹
get_down_img(imgurl_list)
复制代码
3.7 完整源码
下面完整代码需要看 3.1 获取 并 修改 get_ip()函数中的 代理 IP 信息(主机、用户名和密码),还可以修改关键词和爬取的页数:
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒
import os # 创建文件
def get_ip():
"""获取亮数据代理IP"""
host = '你的主机' # 主机
user_name = '你的用户名' # 用户名
password = '你的密码' # 密码
proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址
proxies = {
'http':proxy_url,
'https':proxy_url
}
url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改)
response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP
# print('代理IP详情信息:',response)
response_dict = eval(response) # 将字符串转为字典,方便我们提取代理IP
ip = response_dict['ip']
# print('IP:',ip)
return ip
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 = requests.get(url=url, headers=headers)
# 获取网页源码
html_str = response.text
# 将html字符串转换为etree对象方便后面使用xpath进行解析
html_data = etree.HTML(html_str)
# 利用xpath取到所有的li标签
li_list = html_data.xpath("//div[@class='list list-phone']/ul/li")
# 打印一下li标签个数看是否和一页的电影个数对得上
print(len(li_list)) # 输出20,没有问题
for li in li_list:
imgurl = li.xpath(".//a/img/@src")[0]
print(imgurl)
# 写入列表
imgurl_list.append(imgurl)
def get_down_img(imgurl_list):
# 在当前路径下生成存储图片的文件夹
os.mkdir("小姐姐")
# 定义图片编号
n = 0
for 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'}
# 添加代理IP(这里代理IP这里需要看`3.1 免费获取代理IP`自己去获取)
proxies = get_ip()
# 每次发送请求,获取图片
img_data = requests.get(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__':
page_number = 69 # 设置需要爬取页数
imgurl_list = [] # 保存所有图片链接
# 1、循环构建每页的链接
for page in range(1,page_number+1):
# 页数拼接
if page == 1:
url = 'http://www.netbian.com/shouji/meinv/index.htm'
else:
url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm'
print('网站页数链接', url)
# 2、获取图片链接
get_imgurl_list(url, imgurl_list)
# 3、下载图片到指定文件夹
get_down_img(imgurl_list)
复制代码
3.8 运行结果展示
在指定文件夹下成功下载我们需要的壁纸:
四、AI 助手升级体验
众多初次尝试使用代理的新用户,在面对代理设置及相关技术细节时,往往感到陌生与困惑,一时之间难以入手。为此,亮数据开发团队特别在平台中集成了 ChatGPT 助手,在登录界面上方可以输入框,就可以开始使用 AI 提问了:
比如:我们提问”Python 如何使用代理 IP“
成功给出 Python 提取代理 IP 的代码:
是不是非常 Nice 啊 !!!
五、总结
代理 IP 对于爬虫是密不可分的,代理 IP 可以安全采集公开数据信息,有需要代理 IP 的小伙伴可以试试亮数据家的代理 IP,现在注册再送 15 美金特别试用金!并且首次充值优惠充多少送多少,最高 500 美金。数据中心代理和静态代理,价格大幅下降和调整收费模式。注册地址::亮数据官网
评论