【python实战】利用代理ip爬取Alibaba海外版数据

news2024/11/26 10:36:49

引言

        在跨境电商的业务场景中,数据采集是分析市场、了解竞争对手以及优化经营策略的重要环节。然而,随着越来越多企业依赖数据驱动决策,许多跨境电商平台为了保护自身数据,采取了更严格的防护措施。这些平台通过屏蔽大陆IP地址或部署复杂的反爬机制,限制了来自特定区域的访问和自动化数据抓取。对于希望获取跨境市场信息的企业来说,这些限制带来了巨大的挑战,尤其是在需要获取实时且准确的数据时,传统的爬虫技术往往面临失效的风险。

        为了解决这一问题,使用IP代理是一个行之有效的策略。代理IP能够动态分配不同区域的IP地址,使数据请求的来源看似分散,避免因短时间内过多请求而触发网站的安全机制。通过定期轮换IP并加入高匿名代理服务,可以有效防止反爬虫系统的检测,继续获取宝贵的数据。接下来我们通过一个爬虫实战来了解如何将IP代理技术集成到爬虫中。

青果网络icon-default.png?t=O83Ahttps://www.qg.net/product/proxyip.html?platform=CSDN§ion=%E4%BB%A3%E7%90%86ip&creator=Yan-%E8%8B%B1%E6%9D%B0

Alibaba海外版数据采集

        跨境电商最关注的就是进货渠道,收集某种产品的供货商信息是十分必要的手段。Alibaba近些年在深耕海外市场,是跨境电商常用的平台之一。接下来我们尝试采集Alibaba海外版的商品数据。

目标

        本次任务的目标是给定一种商品,查询它的所有供应商。在开始之前,我们先来观察一下网页结构。当我们搜索某商品的代理商时(例如laptop),它的url如下:

        可以看到IndexArea对应了供应商的视图,而SearchText的值对应了搜索的关键词,page的值对应了页面。我们继续观察,可以看到卡片对应了factory-card的类。继续观察可以得到:标题存放在card-title下的info下的detail-info的a标签中,而供应商页面在这个标签的href属性中。这些都可以使用xpath获取到。

 

代理IP获取

为什么选择青果代理IP?

 我最近一直在用的产品,也给很多朋友推荐过,体验下来的感受有几点:

1.业务成功率在同类中很高,满足数据采集需求

2.它还有IP可用性保障机制,能自动跳过不可用IP并重新分配,国内访问平均响应时间在1秒内,非常快。

3.性价比高,现提供6小时免费试用,

回到配置代理IP。我们注册好账户后,就可以进入控制台。这里需要注意,必须要实名认证后才能正常使用。

点击“代理IP,就可以选购服务了。选择全球HTTP,需要注意的是全球HTTP不能使用大陆网络访问,适合部署在自己的服务器上使用,这里由于我们要隐藏自己的IP,所以选择短效代理。其他选项大家可以根据实际情况选择。

选购完成后即可在按时业务中找到它。

选择提取工具即可获得代理IP的API链接。它的用法是:每次访问这个url就会得到一个JSO格式的IP地址。这里要注意先把自己的IP添加到白名单中。

编写爬虫

        接下来我们就可以编写爬虫代码。爬取数据的过程分为三个部分:首先我们要访问上面的API获取代理IP,之后使用这个IP访问并获取商品页面,最后我们将页面中的信息提取出来保存在本地。

首先我们定义一个函数,通过请求一个代理服务来获取一个新的代理IP,并返回该IP地址。它发送一个HTTP请求给代理服务器,返回的JSON数据中包含了代理服务器的IP地址。

def get_ip():
    res = requests.get(
        "http://share.proxy.qg.net/get?key=6B8AC36E&num=1&area=&isp=0&format=txt&seq=\r\n&distinct=false")
    res_dict = json.loads(res.text)
    return res_dict["data"][0]["server"]

        之后定义函数,使用获取到的代理IP通过requests访问目标URL,并返回页面的HTML文本。

def get_page(url, ip):
    proxies = {
        'http': ip,
        'https': ip
    }
    res = requests.get(url, proxies=proxies, headers=headers)
    return res.text

        接下来定义一个函数解析传入的HTML页面。它使用XPath查找包含供应商信息的div标签。从每个找到的factory-card中提取供应商的名称和url,并将其存储到result列表中。最终返回包含供应商信息的列表。

def parse_page(page):
    root = etree.HTML(page)
    cards = root.xpath('//div[@class="factory-card"]')
    result = []
    for card in cards:
        node = card.xpath('//div[@class="card-title"]//div[@class="info"]//div[@class="detail-info"]//a')[0]
        title = node.find('/text()')
        url = 'https:' + node.find('/@href')
        result.append({'supplier': title, 'url': url})
    return result

        最后通过函数将供应商信息写入名为suppliers.txt的文件中。每条记录包括供应商的名称和网址。

def save(text_li):
    with open('suppliers.txt', 'a', encoding='utf8') as f:
        for item in text_li:
            f.write(f"{item['supplier']};{item['url']}")

        我们在main函数中调用槐树并控制爬虫翻页。在这个函数中,首先设置要搜索的关键词以及要抓取的页数范围。然后,进入一个循环,在每一页中构造相应的URL,调用get_ip()获取代理IP,使用get_page()获取该页的HTML,接着调用parse_page()提取供应商信息,最后将这些信息通过save()函数保存到文件中。每次请求后,程序会暂停5秒以避免被目标网站封禁。

def main():
    keyword = 'laptop'
    page_end = 2
    for page in range(1, page_end + 1):
        url = f'https://www.alibaba.com/trade/search?fsb=y&page={page}&IndexArea=company_en&CatId=&SearchText={keyword}&viewtype=&tab='
        ip = get_ip()
        page = get_page(url, ip)
        text = parse_page(page)
        save(text)
        time.sleep(5)
    print('Done')

完整代码如下:

import requests
import json
from lxml import etree
import time

# 设置请求头
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
}

def get_ip():
    """获取代理IP"""
    res = requests.get(
        "http://share.proxy.qg.net/get?key=6B8AC36E&num=1&area=&isp=0&format=txt&seq=&distinct=false"
    )
    res_dict = json.loads(res.text)
    return res_dict["data"][0]["server"]

def get_page(url, ip):
    """通过指定的代理IP获取页面内容"""
    proxies = {
        'http': ip,
        'https': ip
    }
    res = requests.get(url, proxies=proxies, headers=headers)
    return res.text

def parse_page(page):
    """解析页面内容并提取供应商信息"""
    root = etree.HTML(page)
    cards = root.xpath('//div[@class="factory-card"]')
    result = []
    for card in cards:
        node = card.xpath('.//div[@class="card-title"]//div[@class="info"]//div[@class="detail-info"]//a')[0]
        title = node.xpath('./text()')[0]  # 修正获取标题的方法
        url = 'https:' + node.xpath('./@href')[0]  # 修正获取URL的方法
        result.append({'supplier': title, 'url': url})
    return result

def save(text_li):
    """将提取的供应商信息保存到文件中"""
    with open('suppliers.txt', 'a', encoding='utf8') as f:
        for item in text_li:
            f.write(f"{item['supplier']};{item['url']}\n")  # 添加换行符

def main():
    """主函数,执行抓取和解析过程"""
    keyword = 'laptop'
    page_end = 2  # 设置要抓取的页数
    for page in range(1, page_end + 1):
        url = f'https://www.alibaba.com/trade/search?fsb=y&page={page}&IndexArea=company_en&CatId=&SearchText={keyword}&viewtype=&tab='
        ip = get_ip()  # 获取代理IP
        page_content = get_page(url, ip)  # 获取页面内容
        text = parse_page(page_content)  # 解析页面
        save(text)  # 保存结果
        time.sleep(5)  # 暂停5秒
    print('Done')

if __name__ == '__main__':
    main()

获取数据

接下来我们启动爬虫获取数据。

运行完毕后,打开txt文档即可看到数据。

总结

        使用IP代理解决跨境电商数据采集中的挑战是非常有效的策略。通过代理技术,企业可以绕过地域性封锁和网站的反爬机制,稳定获取所需数据。像青果网络这样提供全球代理服务的企业,不仅能够帮助企业实现数据采集的顺畅进行,还提供高防御和高匿名性,确保访问安全性和隐私保护。这样的技术支持让企业能够在复杂的跨境环境中更加自如地进行市场分析与业务扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea、VS Code 如何安装Fitten Code插件使用

简介 Fitten Code是由非十大模型驱动的AI编程助手,它可以自动生成代码,提升开发效率,帮您调试Bug,节省您的时间。还可以对话聊天,解决您编程碰到的问题。免费且支持80多种语言:Python、C、Javascript、Typ…

python实战(一)——iris鸢尾花数据集分类

一、任务背景 本文是python实战系列专栏的第一篇文章,我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集,许多分类任务教程都会以这个数据集作为示例,它的数据量是150条…

No.21 笔记 | WEB安全 - 任意文件绕过详解 part 3

(一)空格绕过 原理 Windows系统将文件名中的空格视为空,但程序检测代码无法自动删除空格,使攻击者可借此绕过黑名单限制。基于黑名单验证的代码分析 代码未对上传文件的文件名进行去空格处理,存在安全隐患。相关代码逻…

【软考高级架构】关于分布式数据库缓存redis的知识要点汇总

一.分布式数据库的含义 分布式数据库缓存指的是在高并发的环境下,为了减轻数据库的压力和提高系统响应时间,在数据库系统和应用系统之间增加一个独立缓存系统。 二.常见的缓存技术 (1)MemCache: Memcache是一个高性能的分布式的内…

openlayers 封装加载本地geojson数据 - vue3

Geojson数据是矢量数据,主要是点、线、面数据集合 Geojson数据获取:DataV.GeoAtlas地理小工具系列 实现代码如下: import {ref,toRaw} from vue; import { Vector as VectorLayer } from ol/layer.js; import { Vector as VectorSource } fr…

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…

Unity3D学习FPS游戏(4)重力模拟和角色跳跃

前言&#xff1a;前面两篇文章&#xff0c;已经实现了角色的移动和视角转动&#xff0c;但是角色并没有办法跳跃&#xff0c;有时候还会随着视角移动跑到天上。这是因为缺少重力系统&#xff0c;本篇将实现重力和角色跳跃功能。觉得有帮助的话可以点赞收藏支持一下&#xff01;…

社区养老实训室解决方案

一、实训室建设理念与目标 1.1 培养高质量养老专业人才 随着人口老龄化的不断加剧&#xff0c;对养老专业人才的需求呈现出日益增长的趋势。社区养老实训室的建设理念&#xff0c;正是基于这一背景&#xff0c;致力于培养一支既具备专业技能又拥有综合服务能力的高质量养老人…

gitlab不同账号间·仓库转移

背景&#xff1a;公司业务调整&#xff0c;原先在海外仓库的代码转移回国内 诉求&#xff1a;完整的保留项目记录 操作&#xff1a; 步骤一: 定位到需要迁移的原项目地址 步骤二&#xff1a;创建新项目 步骤三&#xff1a;打开命令行&#xff0c;创建好文件路径为需要clo…

Anchor DETR论文笔记

原文链接 [2109.07107] Anchor DETR: Query Design for Transformer-Based Object Detection (arxiv.org)https://arxiv.org/abs/2109.07107 原文笔记 What 提出了一种新的基于锚点的查询设计&#xff0c;即将锚点编码为对象查询。 Why 对象检测任务是预测图像中每个对象…

监督学习之逻辑回归

逻辑回归&#xff08;Logistic Regression&#xff09; 逻辑回归是一种用于二分类&#xff08;binary classification&#xff09;问题的统计模型。尽管其名称中有“回归”二字&#xff0c;但逻辑回归实际上用于分类任务。它的核心思想是通过将线性回归的输出映射到一个概率值…

C++与现代开发实践第三节:多线程与并发编程

第四章&#xff1a;C与现代开发实践 第三节&#xff1a;多线程与并发编程 在这一课中&#xff0c;我们将详细探讨多线程与并发编程的各个方面&#xff0c;特别是从线程的创建、管理到高级的优化技术&#xff0c;并且通过复杂的实战案例来展示如何应对并发问题。最后&#xff…

探索现代软件开发中的持续集成与持续交付(CI/CD)实践

探索现代软件开发中的持续集成与持续交付&#xff08;CI/CD&#xff09;实践 随着软件开发的飞速进步&#xff0c;现代开发团队已经从传统的开发模式向更加自动化和灵活的开发流程转变。持续集成&#xff08;CI&#xff09; 与 持续交付&#xff08;CD&#xff09; 成为当下主…

git入门操作

文章目录 git入门操作git创建仓库&#xff1a;git initgit clone工作区域&#xff1a;文件状态git添加和提交git add git statusgit add .git commit -m 版本描述git ls-filesgit log git的reset回退版本git log 查看版本号git reset --softgit reset --hardgit reset --mixed总…

Github 2024-10-21 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-10-21统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目7Python项目5Go项目2Svelte项目1非开发语言项目1C++项目1Shell项目1技术面试必备知识开源项目 创建周期:2442 天Star数量:1762…

chrome清除https状态

莫名其妙的http跳转到https的url了。 解决办法 浏览器地址栏输入&#xff1a;chrome://net-internals/#hsts 输入你需要删除的域名即可&#xff01;&#xff01;&#xff01;

uniapp picker实现省市二级级联和省市区三级级联

接口返回值格式&#xff1a; 二级级联-vue2 <picker mode"multiSelector" change"bindPickerChange" columnchange"columnchange" :value"index":range"array" range-key"label"><view class"uni…

Qt (QGroupBox、QTableView、QTableWidget)QSS样式

文章目录 设置效果样式内容说明qss文件内容补充 设置效果 先上图&#xff0c;为了方便大家区分&#xff0c;使用了多种颜色进行设置。 样式内容说明 * {background-color: #88e7ea; }设置全局背景色 可能是因为 QGroupBox 的背景色优先级较高&#xff0c;覆盖了全局样式。 …

GD32学习知识点累计

时钟系统 GD32f427主频最高位240MHZ&#xff08;但是只能到200M&#xff09;&#xff0c;GD32给的函数外接25MHZ晶振配置主频为200MHZ,APB1最高频率为60HZ配置为主频的4分频为50MHZ&#xff0c;APB2最大为120MHZ配置为主频的2分频为100MHZ 定时器 无论什么定时器最大频率为200M…

上行流量和下行流量的区别

一、定义 上行流量 指从本地设备&#xff08;如用户的计算机、手机等客户端设备&#xff09;发送数据到远程设备&#xff08;如服务器&#xff09;的流量。简单来说&#xff0c;就是数据从你的设备传出去的过程所产生的流量。例如&#xff0c;当你上传一张图片到云存储服务时&…