「爬虫实战分享:如何高效爬取某汽车官方销售排行榜」
本文目录
- 💖前言
- 一、💫代理IP的作用
- 二、💫爬虫中的挑战
- 1.代理IP的质量和稳定性
- 2.IP封禁问题
- 3. 反爬虫技术的升级
- 三、💫亮数据动态代理:数据采集的可靠伙伴
- 1、真实体验
- 四、💫爬虫实战:使用亮数据代理ip爬取某汽车官方销售排行榜
- 1.选择服务
- 2.注册账号
- 3.使用动态住宅ip
- 4.验证代理ip是否可用
- 5.代码实战
- 6.扩展
- 💫总结
- 投票🚗(传送门)
💖前言
在互联网数据爬取过程中,代理IP已成为爬虫技术中不可或缺的工具。代理IP通过替代爬虫的真实IP地址,使得爬虫能够绕过网站的访问限制,如IP封禁、访问频率限制等。随着反爬虫技术日益复杂,代理IP为爬虫提供了更高的灵活性、隐私保护和稳定性。因此,合理使用代理IP,成为开发高效爬虫程序的关键。
一、💫代理IP的作用
代理IP的核心作用在于伪装请求来源,避免被目标网站检测到爬虫行为。通常,网站会通过检测单一IP的请求频率来判断是否为爬虫。当某个IP发送大量请求时,网站可能会封禁该IP,以防止爬虫程序继续抓取数据。使用代理IP可以将多个IP地址与请求分配进行关联,避免单一IP暴露在高频率请求下,从而降低封禁风险。
二、💫爬虫中的挑战
尽管代理IP能有效解决封禁问题,但在实际应用中,使用代理IP时也会遇到不少挑战:
1.代理IP的质量和稳定性
代理IP的质量直接影响爬虫的效率。一些免费代理或低质量代理IP可能存在连接不稳定、响应速度慢或易被封禁等问题。为了保证爬虫的持续性和稳定性,开发者需要选择高质量的付费代理服务。
2.IP封禁问题
高级的反爬虫机制能够识别和封锁大量使用代理IP的爬虫请求,尤其是当多个请求来自同一个代理池时。为了避免封禁,开发者需要确保代理IP池的多样性,并定期更换IP地址。
3. 反爬虫技术的升级
随着反爬虫技术的不断进步,越来越多的网站使用更加复杂的技术,如验证码、人机验证、JavaScript挑战等,来识别和阻止爬虫。即使使用代理IP,爬虫仍可能遭遇难以逾越的技术障碍
三、💫亮数据动态代理:数据采集的可靠伙伴
在本人日常工作中,工作内容与爬虫技术紧密相关。在长期的实践中,我尝试使用过众多不同来源的代理IP服务。经过实际体验和对比,其中有一款代理IP产品表现出色,堪称行业翘楚 Bright Data。它不仅能够全方位满足我在爬虫工作中的各种复杂需求,而且在性能、稳定性以及安全性等关键方面都展现出卓越的品质。正因如此,我愿意为其优质的服务支付相应的费用。
1、真实体验
-
全球覆盖与IP池规模
从个人使用角度来看,我对网络内容的访问需求是多样化且广泛的。例如在进行市场调研时需要获取不同国家和地区的行业信息时,使用Bright Data,它提供的超1亿个ip以及涵盖超过200个国家地区,让我能够很轻松的突破地域限制,获取最真实、最贴近实际的信息,这为我的工作带来了极大的便利。 -
高匿名性与安全性
在网络活动中,匿名性和安全性是我最为关注的因素之一。Bright Data提供的是真实用户的住宅代理IP地址,这一点让我非常放心。在使用其他一些平台时,我曾担心由于IP来源的问题而被目标网站轻易识破,导致被封禁,从而影响工作的进展。但Bright Data的真实住宅代理能够很好地模拟真实用户的行为,使我在进行网络访问时,很难被网站识别为爬虫流量,大大降低了被封禁的风险。 -
高速度与低延迟
工作效率对于我来说也是至关重要,尤其是在处理大量数据抓取和分析的任务时。Bright Data提供了高速稳定的连接,这让我能够快速地完成工作。在实际使用中,我明显感觉到网页加载和数据抓取的速度非常快,减少了延迟和超时的情况。 -
灵活的计费与付款方式
费用也是我选择网络代理平台时考虑的重要因素之一。与其他平台相比,Bright Data在计费方式上的灵活性实在是无与伦比。与其他那些固守固定计费模式的平台相比,Bright Data真正做到了为用户着想。它提供了按流量、按IP数量、按时间等多种计费方式,让我可以根据自己的实际需求来灵活调整。无论是短期的爆发式业务需求,还是长期的稳定使用,Bright Data都能提供恰到好处的计费方案,确保我只为自己真正使用的资源付费。这种灵活性让我能够更好地控制成本,同时也让我感受到了Bright Data对我需求的真实理解和支持。而且,Bright Data经常推出一些优惠活动,如注册即赠2美金试用金->立即试用<-,并且购买的动态IP享受5折优惠等。这些优惠活动为我节省了不少成本,提高了产品的性价比。
四、💫爬虫实战:使用亮数据代理ip爬取某汽车官方销售排行榜
目标网站:https://www.autohome.com.cn/
1.选择服务
这里我使用的是亮数据家的动态住宅代理,动态住宅代理是一种由互联网服务提供商(ISP)分配给用户的可自动更改IP地址的网络代理服务。它具高匿名性,因IP动态变化且来自真实住宅网络,能保护隐私;真实性强,可模拟真实用户环境;适用广泛,能满足不同业务场景需求。其工作原理是用户请求时,代理服务器从大量住宅IP池中分配可用IP并加密转发数据。
2.注册账号
首先打开->Bright Data官网<-,点击免费试用,输入邮箱(用来收取验证码)、微信、手机号
,进行注册。
注册成功后,来到支付页面,会发现已经赠送2$的使用额度,有效期为3天,如下图:
3.使用动态住宅ip
点击左侧菜单中Proxies & Scraping,选择住宅代理,点击开始使用,如下图
进行一些简单的设置,通道名称、代理类型、以及指定国家的ip
添加成功后,参考代码语言选择Python,然后找到你的代理IP链接:如下图:
4.验证代理ip是否可用
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_html_json(url):
"""发送请求,获取响应"""
# 请求头模拟浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.14 Safari/537.36'}
proxies = {
'http': '替换成你刚刚复制的链接',
'https': '替换成你刚刚复制的链接'
}
# 添加请求头和代理IP发送请求
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# 获取网页源码
if response.status_code == 200:
# 解析JSON数据
html_str = response.json()
return html_str
else:
print('Failed to retrieve data', response.status_code)
print(get_html_json('https://httpbin.org/ip'))
连续执行两次后,发现输出的当前ip都是不一样的,代表可用,并且每次执行,使用的都是不同ip。
5.代码实战
构建新能源汽车销售榜url
定义了如下方法,其中部分参数是固定的,pagesize参数用来确定爬取的条数,date是确定爬取哪一个月的榜单。
def build_url(date,pagesize):
"""构建完整的URL"""
base_url = "https://cars.app.autohome.com.cn/carext/recrank/all/getrecranklistpageresult2"
params = {
'from': 28,
'pm': 2,
'pluginversion': '11.65.0',
'model': 1,
'channel': 0,
'pageindex': 1,
'pagesize': pagesize,
'typeid': 1,
'subranktypeid': 1,
'levelid': 201908,
'price': '0-9000',
'date': date
}
return requests.Request('GET', base_url, params=params).prepare().url
当我们通过url发起请求并获取响应后,获取的是json数据,我们需要提取出有用的数据。
"""提取需要的数据"""
def get_rec_rank(data):
# 提取 list 数据
list_data = data['result']['list']
data_list = []
for item in list_data:
if isinstance(item, dict) and 'brandid' in item:
# print(item)
keys_to_extract = ['brandid', 'priceinfo', 'rank', 'seriesname', 'salecount', 'scorevalue', 'seriesid','seriesimage']
# 使用字典推导式提取特定key
extracted_data = {key: item[key] for key in keys_to_extract if key in item}
print(extracted_data)
data_list.append(extracted_data)
return data_list
执行后,如下图,相关的数据都被提取出来了。
写入到excel,方便查看,定义如下方法:
def dict_list_to_excel(data_list, excel_file):
# 将字典转换为DataFrame
df = pd.DataFrame(data_list)
# 将DataFrame写入到Excel文件
df.to_excel(excel_file, index=False)
完整代码
import requests
import urllib3
import pandas as pd
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_html_json(url):
"""发送请求,获取响应"""
# 请求头模拟浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.14 Safari/537.36'}
proxies = {
'http': '替换成你刚刚复制的链接',
'https': '替换成你刚刚复制的链接'
}
# 添加请求头和代理IP发送请求
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# 获取网页源码
if response.status_code == 200:
# 解析JSON数据
html_str = response.json()
return html_str
else:
print('Failed to retrieve data', response.status_code)
"""构建新能源汽车销售榜的url"""
def build_url(date,pagesize):
"""构建完整的URL"""
base_url = "https://cars.app.autohome.com.cn/carext/recrank/all/getrecranklistpageresult2"
params = {
'from': 28,
'pm': 2,
'pluginversion': '11.65.0',
'model': 1,
'channel': 0,
'pageindex': 1,
'pagesize': pagesize,
'typeid': 1,
'subranktypeid': 1,
'levelid': 201908,
'price': '0-9000',
'date': date
}
return requests.Request('GET', base_url, params=params).prepare().url
"""提取需要的数据"""
def get_rec_rank(data):
# 提取 list 数据
list_data = data['result']['list']
data_list = []
for item in list_data:
if isinstance(item, dict) and 'brandid' in item:
# print(item)
keys_to_extract = ['brandid', 'priceinfo', 'rank', 'seriesname', 'salecount', 'scorevalue', 'seriesid','seriesimage']
# 使用字典推导式提取特定key
extracted_data = {key: item[key] for key in keys_to_extract if key in item}
print(extracted_data)
data_list.append(extracted_data)
return data_list
"""写入到excel"""
def dict_list_to_excel(data_list, excel_file):
# 将字典转换为DataFrame
df = pd.DataFrame(data_list)
# 将DataFrame写入到Excel文件
df.to_excel(excel_file, index=False)
if __name__ == '__main__':
# 设置需要爬取的月份
date = '2025-01'
# 设置爬取的条数
pagesize = 100
# 构建url,并发起请求
data = get_html_json(build_url(date, pagesize))
# 提取需要的数据数据
data_list = get_rec_rank(data)
print(data_list)
# 写入excel
dict_list_to_excel(data_list,'NewEnergySalesLeaderboard.xlsx')
# 也可以通过seriesid进入到每个汽车的详情页面,获取每个汽车的更多详细信息
免责声明:本文爬虫内容仅供学习参考,对于阅读后进行爬虫行为的用户,不承担任何法律责任。
6.扩展
点击榜单上的某一台车,进入到该车的详情页面发现每一台车的url的构成只有一处不一样,跟我们上面爬取到的seriesid
是一致的,所以我们可以根据seriesid
依次爬取某一台车的详情页面的数据,比如配置信息、车型等,感兴趣的伙伴快去尝试下吧!
💫总结
代理IP对爬虫来说是不可或缺的,但在使用时必须遵守相关法律法规和目标网站的规定,严禁从事非法活动或滥用代理IP服务。亮数据家的动态住宅代理IP可以帮助爬虫安全采集公开数据信息,现在更是推出注册即送2美元的使用额度,以及限时5 折优惠,新老客户同享,有需要代理IP的小伙伴可以体验一下:Bright Data官网