首页 > 编程语言 >Python爬虫:代理ip电商数据实战

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

时间:2024-07-25 13:58:27浏览次数:15  
标签:Python ip price 代理 爬虫 proxy IP 电商

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

作为一名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地址。

三、代理服务的选择:IPIDEA平台

代理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服务。它不仅提供了广泛的全球IP资源,而且操作简单,易于上手。通过使用IPIDEA,我能够轻松获取到我需要的数据。这种便捷性和高效性,对于像我这样经常需要进行数据爬取和分析的人来说,是非常宝贵的资源。如果你还在寻找一个可靠的代理IP,是一个值得我们考虑的选择。

标签:Python,ip,price,代理,爬虫,proxy,IP,电商
From: https://blog.csdn.net/weixin_51390582/article/details/140652723

相关文章

  • python科学计算:加速库numba —— 安装和试用
    安装(anaconda环境下)condainstallnumbaDemo代码:fromnumbaimportjitfromnumpyimportarangeimportnumpyimporttime@jitdefsum2d(arr):M,N=arr.shaperesult=0.0foriinrange(M):forjinrange(N):result+=a......
  • Python - Selenium抓取淘宝直播间评论(可使用无头模式)
    Python-Selenium抓取淘宝直播间评论(可使用无头模式)下面介绍如何使用python中的selenium简单抓取淘宝直播间实时评论。友情提醒,仅供学习交流使用,请勿用于非法用途!一、创建python项目1.在目录下新建main.py和venv虚拟环境:创建虚拟环境:python-mvenvvenv激活虚拟环......
  • 需要帮助来提取此 XML 节点 - Python 中的 Excel 连接字符串
    我有一个Python程序,打开Excel(XLSX)文件,并尝试查找<connection>节点。这是connections.xml文件中的完整XML。<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><connectionsxmlns="http://schemas.op......
  • VoIP和SIP的联系和区别
    联系1.技术互补VoIP技术基础:VoIP是一种基于IP协议栈的数字话音传输技术,它通过对传统的模拟语音信号进行数字化、压缩、打包,封装成帧等一系列处理,使得语音业务可以通过IP网络进行承载。SIP协议作用:SIP是一种基于客户端服务器的应用层控制协议,主要用于建立、维护和终止多媒体......
  • VoIP所在的协议层次
            VoIP(VoiceoverInternetProtocol)本身不是一种协议,而是一种技术或通信方式。虽然VoIP技术本身不是协议,但它依赖于多种协议来实现其功能。所以,其并不严格地工作在网络通信的某一层,而是跨越了多个层次,但主要涉及到的是应用层、传输层和网络层(根据其依赖的多个协......
  • 【python】Python中采集Prometheus数据,进行数据分析和可视化展示
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 使用python3拼接rgb.txt与depth.txt为associate.txt(适用于GCNV2_SLAM中TUM数据集的运
    这里以GCNV2_SLAM中TUM数据集的运行为例子:安装gnv2_slam可以参考:GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)-CSDN博客首先下载数据集ComputerVisionGroup-DatasetDownload下载后通过该命令解压:tar-xvfrgbd_dataset_freiburg1_desk.tgz打开后,你可以发现:在该数据集......
  • 【Python】到底什么是字符串格式化?
    字符串格式化的目的:在字符串中动态地插入数据或表达式。字符串格式化的对象:要插入到字符串中的数据。在详细解释之前,先引入第一种字符串格式化的方法name=input('请输入你的名字:')gender=input('请输入你的性别:')age=input('请输入你的年龄:')print(f'你的名字是{......
  • Python PDF 编辑器
    我将制作一个PDF编辑器,它可以更改PDF中的单词,而无需更改文本的来源。这是我的代码,到目前为止,它所做的一切都是正确的,但我可以获得文本颜色和文本大小。importpymupdfimportos#OpenthePDFdocumentdoc=pymupdf.open('input.pdf')#Loadthecustomfontfi......
  • JSON 响应中的字符串值变成 Python pandas datafram 中的数值
    我正在使用Python从RESTAPI中提取数据并将其存储在SQL数据库中。除了响应中的一个JSON值之外,一切工作正常。JSON响应[{"pbxId":"XXXcxx","site":"XXXGroup-SydneyOffice","name":"XXXXService","extension":......