Python爬虫-代理ip爬取电商数据实战

举报
是Dream呀 发表于 2024/07/24 09:03:00 2024/07/24
【摘要】 引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训练。虽然网络上公开的数据很多,但是碍于其时效性和准确性,很难拿来直接用,所以我总是亲自来爬取数据。这不前几天,我正在...

引言:数据访问管理引发的烦恼

作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训练。虽然网络上公开的数据很多,但是碍于其时效性和准确性,很难拿来直接用,所以我总是亲自来爬取数据。

这不前几天,我正在为训练的模型爬取数据的时候,爬着爬着我的爬虫突然不工作了!检查了好几遍都没有发现哪里出错,已经爬了一半了,这可把我急坏了。在网上查阅了大量的资料后,我发现可能是其触发了访问管理机制。按照检查方法,当处于非爬虫操作时,我们在F12控制台输入window.navigator.webdriver时,显示的是false,但是我输入进去却出现了刺眼的红色报错,而且显示也出现了True,我更加相信是我触发了访问管理机制。
在这里插入图片描述
“Failed to load resource: the server responded with a status of 400”,对这个报错我专门去请教了数据分析的前辈,他告诉我这就是非常典型的爬虫触发了访问管理机制,检测出是selenium,报400,无法进入网站。

一、为什么会出现访问管理

为什么会出现访问管理机制呢,想了一大圈,也没发现自己哪里违反了规定,经过他的解答,我才知道原来很多网站常用的一种方式是对单ip进行管理,如果一个ip在一定的时间内大量访问,那么就会不再返回信息,而是返回错误。访问管理机制,听起来就像是网站的“防盗系统”。它们通过各种技术手段,试图识别并阻止自动化的数据抓取行为。这些手段包括但不限于:管理单个IP地址的访问频率、检测用户代理字符串、分析访问模式等。一旦检测到异常行为,网站就会采取相应的措施,比如管理访问、返回错误信息等。
我们此次的触发访问管理机制的原因便是,待爬取的网站运行自己的 JavaScript 代码,对我的爬虫发送过去的请求信息进行检测,然后发现我们是selenium后,触发了 “防盗系统”,就把我们爬虫的请求阻止了。就像上图所示,表现为返回400错误码,意味着请求无法被服务器理解或接受。

二、代理IP的解决方案

这时,代理IP显得尤为重要,它能帮助处理这些管理。代理IP本质上是一个位于用户和目标服务器之间的中介服务器。当用户通过代理IP发送请求时,请求首先到达代理服务器,然后由代理服务器转发到目标服务器。这样,使用代理服务器来代替用户的真实IP地址发送网络请求,从而隐藏用户的真实身份,减少被目标网站识别的风险。
代理IP的作用

  1. 匿名性:代理IP提供了一种匿名访问网络的方式,用户的真实IP地址被隐藏,从而保护用户的隐私。
  2. 高效采集全球公开数据:对于某些受到地区或访问机制管理的平台,通过更换合适的代理IP,可帮助访问原本无法访问的网站和服务。
  3. 地理位置多样性:代理IP通常具有不同的地理位置,可以帮助用户访问那些有地区要求的资源。

代理IP的类型

  1. 透明代理:代理服务器向目标服务器透露用户的真实IP地址,但隐藏了请求的来源。
  2. 普通匿名代理:代理服务器不向目标服务器透露用户的真实IP地址,但目标服务器知道请求是通过代理发出的。
  3. 高匿名代理:代理服务器不向目标服务器透露任何用户信息,目标服务器看到的只是代理服务器的IP地址。

三、代理服务的选择

代理ip的作用很大,然而选择合适的代理服务并非易事,网上关于代理ip的网站有很多,不搜不知道,一搜直接吓我一跳,网页上代理平台眼花缭乱,各种广告满天飞,根本不知道如何选择。我看到这些广告我就想放弃了,根本无心去研究啊,太乱了!但是幸好,老前辈给我推荐了一个他认为比较靠谱的平台,一回到家后,我就迫不及待使用起来了

四、代理服务的具体操作

经过半小时的学习和实践,我就已经可以熟练使用其ip代理功能,接下来我把自己的操作分享给大家。

API代理获取

首先登录进平台之后,我们就会看到下面的界面,第一步点击获取代理,然后点击API提取就可以去获取我们需要的API了:
在这里插入图片描述
要提取API有三个方式,这里推荐方式一和方式二,这样选择是因为有利于我们后期利用代理IP去做开发使用。这里我们以方式一中的API提取作为例子,在提取的时候可以手动选择选择套餐及提取数量,还有我们想要的ip的所属国家,在这些都选定好之后,就可以一键生成专属的API链接了,记住这个API链接,下面会用到。在这里插入图片描述
打开这个链接就会看到生成的所有ip了:
在这里插入图片描述

浏览器设置代理IP

IPIDEA的代理服务支持多种IP代理服务,使用灵活且易于操作,且可以放到浏览器上使用,这里我们以谷歌浏览器为例,找到谷歌浏览器的右上角的三个点,选择【设置】进入,在设置中点击【系统】以后选择【打开您计算机的代理设置】
在这里插入图片描述
在手动设置代理中,开启使用代理服务器,填写我们刚才打开链接看到的ip,这里只需要填写一个ip就可以了吧,比如这里我们在这里选择的代理ip:109.74.194.146.10303,其中109.74.194.146就是代理ip的地址,后面的10303就是端口信息。
在这里插入图片描述
配置完成之后,打开谷歌搜索引擎,搜索IP就可以看到当前代理后的IP地址,成功给我们匹配到英国伦敦,说明这是一个来自英国的代理IP。
在这里插入图片描述

五、代理IP在跨境电商的应用

除此之外,代理IP在跨境电商和海外市场分析中发挥着重要作用。在当下主流的电商平台,如亚马逊和EBay,都对爬虫有着很强的防护机制,不稳定的IP地址就会很容易被平台识别。特别是像EBay这样的海外大平台,它们在全球多个国家和地区设有分支机构,这就需要使用不同地区的IP地址来分别管理。
一个不稳定或被多次使用的代理IP不仅不可靠,而且速度会很慢,更有可能这个ip已经被注册使用过,如果再使用就会招致来很多不必要的麻烦。因此,无论对从事跨境电子商务的企业,还是做跨境电商数据的用户来说,拥有一个稳定可靠的代理IP是至关重要的。IPIDEA在这方面做得非常出色,这也是推荐使用IPIDEA平台的一个重要原因。
拿我最喜欢鞋子来举例子,通过使用代理ip依靠爬虫,我们就可以轻松获取EBay的海外平台价格。
在这里插入图片描述
首先设置代理IP API URL,将我们生成的代理ip链接放入进去,然后构建代理字典:

proxy_api_url = 'http://api.proxy.ipidea.io/getBalanceProxyIp'
params = {
    'num': 100,
    'return_type': 'txt',
    'lb': 1,
    'sb': 0,
    'flow': 1,
    'regions': '',
    'protocol': 'http'
}

# 获取代理IP
response = requests.post(proxy_api_url, headers=headers, params=params, verify=True)
proxy_ip = response.text

# 构建代理字典
proxies = {
    'http': f'https://{proxy_ip}',
    'https': f'https://{proxy_ip}'
}

print(f"Using proxy: {proxy_ip}")

完成代理ip的部署之后,对商品页面进行抓取,找到我们需要的价格和元素,这里选择了商品价格、货币类型及运费三类信息:
在这里插入图片描述
将这三类信息元素放入我们的爬虫之中,例如价格price_element = soup.select_one('.x-price-primary span[itemprop="price"]'),然后运行爬虫结果,会发现其输出了所有代理ip的信息以及我们所需要的商品的价格和运费信息:
在这里插入图片描述
更进一步来说,通过这一个物品的信息我们就可以解析整个系列的物品信息,通过把所有的物品信息收集起来,就可以做进一步的价格监控、竞品分析、市场趋势等数据分析,具体完整的代码如下:

from fake_useragent import UserAgent
import requests
from bs4 import BeautifulSoup
import re

# 设置随机的请求头
headers = {'User-Agent': UserAgent().random}

# 代理IP API URL
proxy_api_url = 'http://api.proxy.ipidea.io/getBalanceProxyIp'
params = {
    'num': 100,
    'return_type': 'txt',
    'lb': 1,
    'sb': 0,
    'flow': 1,
    'regions': '',
    'protocol': 'http'
}

# 获取代理IP
response = requests.post(proxy_api_url, headers=headers, params=params, verify=True)
proxy_ip = response.text

# 构建代理字典
proxies = {
    'http': f'https://{proxy_ip}',
    'https': f'https://{proxy_ip}'
}

print(f"Using proxy: {proxy_ip}")

# 目标商品URL
item_url = 'https://www.ebay.com/itm/335217926054'

# 商品信息字典
item_info = {}

# 发送请求获取商品页面HTML
try:
    page_response = requests.get(item_url, proxies=proxies)
    page_response.raise_for_status()  # 检查请求是否成功
    soup = BeautifulSoup(page_response.text, 'html.parser')

    # 解析商品价格
    price_element = soup.select_one('.x-price-primary span[itemprop="price"]')
    item_info['price'] = price_element['content'] if price_element else 'Price not found'

    # 解析货币类型
    currency_element = soup.select_one('.x-price-primary span[itemprop="priceCurrency"]')
    item_info['currency'] = currency_element.text.strip() if currency_element else 'Currency not found'

    # 解析运费
    shipping_label = next((label for label in soup.select('.ux-labels-values__labels') if 'Shipping:' in label.text), None)
    if shipping_label:
        shipping_price_element = shipping_label.find_next_sibling('.ux-textspans--BOLD')
        item_info['shipping_price'] = re.search(r'\d+\.\d+', shipping_price_element.text).group(0) if shipping_price_element else 'Shipping price not found'
    else:
        item_info['shipping_price'] = 'Shipping price not found'

except requests.RequestException as e:
    print(f"An error occurred: {e}")

# 打印商品信息
print(item_info)

总结与展望

在我个人的体验中,它不仅提供了广泛的全球IP资源,而且操作简单,易于上手。通过使用我能够轻松获取到我需要的数据。这种便捷性和高效性,对于像我这样经常需要进行数据爬取和分析的人来说,是非常宝贵的资源。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。