【爬虫实战】利用代理爬取Temu电商数据

引言

        在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而优化产品和服务,提高客户满意度和忠诚度。同时,数据采集可以实时跟踪库存水平和销售情况,帮助企业管理库存,减少库存成本和浪费,优化供应链,提高物流和配送效率。因此,数据采集对于跨境电商而言是至关重要的,可以帮助企业提高效率和盈利能力,获得竞争优势。

        但现实中,数据采集可能会遇到多样化的数据来源、不统一的数据格式、庞大的数据量、数据质量和安全隐私问题等困难和挑战。为了应对这些挑战,可以采用旋转代理或IP池避免频繁请求同一IP地址模拟用户行为(如随机请求间隔和动态内容处理)设置请求头使请求看起来更像真实浏览器、随机化请求参数、延时和限速策略、动态IP切换、模拟AJAX请求等方式但这些方式都必须避免网站检测到请求来自同一台设备,这时就需要使用代理工具。

数据采集实战

        这里我们尝试采集Temu电商网站数据。Temu是一个电商平台,它成立于2019年。Temu主要针对年轻消费者,提供各种时尚、潮流、品质优良的消费品,包括服饰、鞋类、家居用品、个护产品、运动健康用品等。Temu的特色之一是价格实惠,致力于为消费者提供高性价比的商品。由于Temu网站主要做跨境电商业务,所以网站有很多验证机制,大陆IP很容易连接不上网站同时,网站也具有多纬度的爬虫检测机制。避免这些困难的一大方法就是使用代理服务。

 云端配置

市面上能够解锁网络验证机制的代理工具很多,今天我们选用Proxy302这家代理服务。首先进入控制台页面,点击“动态IP”,然后选择“通用代理生成”,即可生成一条代理。如果需要指定某个区域IP的话,也可以通过地区代理生成实现。

        生成完毕后在“已购代理”中即可找到代理。其中代理地址、端口、用户名、密码均在第一格显示,最后一格中可以开关代理,到这里我们就可以开始使用代理。

远程PC

        有些同学可能希望有一个更为直观的可视化使用环境,可以配置一台远程电脑实现。使用方法也很简单,首先要先配置一下连接工具。点击“连接工具”,选择想要的远程PC区域和配置即可创建。创建好之后在下方可以找到远程PC的用户名和密码。

      

  之后点击“远程控制”,即可在网页端控制远程PC并连接到代理。

        输入用户名和密码即可连接上。

        等待2-3分钟,就可以加载到系统中。可以看到它就是一台云电脑,可以按照自己喜欢的方式来操作和访问代理服务器。

数据采集

        在采集数据之前,我们先观察一下网页结构。使用开发者工具可以看到,商品名和价格位于一个div下的两个不同div之中。通过aria-label属性可以轻松定位到两个数据。

        基于以上分析,我们可以编写一个Python爬虫来抓取这几处的商品信息。首先我们需要编辑请求头,使得网站认为我们是一个用户而非程序。

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'}

        之后按照我们在网页中配置的数据配置代理。按照url形式填入我们的代理地址、端口、用户名、密码,并将其放置在一个字典中。

host = 'proxy.proxy302.com:2222' 
user_name = 'maNwkWj2S'
password = 'tIegn05sPzyLdl0m' 
proxy_url = f'http://{user_name}:{password}@{host}' 
proxies = {
'http': proxy_url}

之后我们使用requests包通过配置好的代理发送请求,并获得网页。

response = requests.get(url, headers=headers, proxies=proxies)
html_str = response.text
return html_str

        再之后我们就可以按照分析抓取商品信息。这里们选用xpath的方式,按照层级选中目标,之后保存在一个字典中。

html_data = etree.HTML(html_str)
    li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')
    for li in li_list:
        title = li.xpath('.//a[@class="pic"]/@title')
        title = ''.join(title)
        goods_url = 'https:' + li.xpath('.//a[@class="pic"]/@href')[0]
        price = li.xpath('.//p[@class="price"]/span[@class="price_n"]/text()')[0]
        print(price)
        pre_price = li.xpath('.//p[@class="price"]/span[@class="price_r"]/text()')[0]
        img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]
        print({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,
               '图片链接': img_url})
        data_list.append(
            {'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,
             '图片链接': img_url})

最后,我们将获取到的数据写入到本地文件中。

df = pd.DataFrame(data_list)
df.drop_duplicates()
df.to_excel('电商采集数据集.xlsx')

最后通过主函数,将网址和查询关键词发送到函数中,之后让我们运行一下。

可以看到程序正常运行。打开生成的文件可以看到最终的结果。

完整代码如下:

import pandas as pd  # pandas,用于写入Excel文件
import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒

host = 'proxy.proxy302.com:2222' 
user_name = 'maNwkWj2S' 
password = 'tIegn05sPzyLdl0m' 

proxy_url = f'http://{user_name}:{password}@{host}' 
proxies = {
    'http': proxy_url,}

def get_html_str(url):
    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',
        'cookie': 'dest_area=country_id%3D9000%26province_id%3D111%26city_id%3D0%26district_id%3D0%26town_id%3D0; __permanent_id=20240526224738315295956158315909549; ddscreen=2; __dd_token_id=202104062202466363669562232a8cdf; search_passback=51a9db4eecb3b24ff6ab7766fc010000fbbbca00dcab7766; pos_6_start=1716734858859; pos_6_end=1716734858807; deal_token=1576b51797067261d98918f7285bd6495f87d87938a72c8849da21f5acf064403857abf3742ed1c739; login_dang_code=202103291113455962963369449d079d; bind_custid=106901607; __visit_id=20240623125745069259408506015858558; __out_refer=1719118665%7C!%7Cwww.baidu.com%7C!%7C; __trace_id=20240623125804232373763612518646769; __rpm=s_112100...1719118830586%7Clogin_page...1719118833969; sessionID=pc_4012ba7c7eaa04527a44c2379c16b0c6164ad4d2625cd18cfe1c7acbf03f1be0; USERNUM=8Y+5nq8RumeCtfoBrVftkA==; login.dangdang.com=.ASPXAUTH=qFvA8gjuJvlbZfleoWsswUEz1frglA5/; dangdang.com=email=bWF3ZW5jYWkxOTk0QDE2My5jb20=&nickname=&display_id=9562776931392&customerid=kVr1TGEUb6ByKz6allcKDQ==&viptype=04VLqcFOuaQ=&show_name=156****4818; ddoy=email=mawencai1994@163.com&nickname=&validatedflag=2&uname=mawencai1994%40163.com&utype=0&.ALFG=off&.ALTM=1719118838363; LOGIN_TIME=1719118839620'
    }


    response = requests.get(url, headers=headers, proxies=proxies)
    html_str = response.text
    return html_str

def get_data(html_str, page, data_list):
    html_data = etree.HTML(html_str)
    li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')
    for li in li_list:
        title = li.xpath('.//a[@class="pic"]/@title')
        title = ''.join(title)
        goods_url = 'https:' + li.xpath('.//a[@class="pic"]/@href')[0]
        price = li.xpath('.//p[@class="price"]/span[@class="price_n"]/text()')[0]
        print(price)
        pre_price = li.xpath('.//p[@class="price"]/span[@class="price_r"]/text()')[0]
        img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]

        print({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,
               '图片链接': img_url})
        data_list.append(
            {'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,
             '图片链接': img_url})


def to_excel(data_list):
    df = pd.DataFrame(data_list)
    df.drop_duplicates()
    df.to_excel('电商采集数据集.xlsx')
def main():
    print('开始作业')
    keyword = '手机'
    page_num = 1
    data_list = []
    for page in range(1, page_num + 1):
        url = f'https://www.temu.com/search_result.html?search_key={keyword}&search_method=user&refer_page_el_sn=200010&srch_enter_source=top_search_entrance_10005&refer_page_name=home&refer_page_id=10005_1722768505220_nkdyrd23tn&refer_page_sn=10005&_x_sessn_id=iq9v42rvzn'
        html_str = get_html_str(url)
        get_data(html_str, page, data_list)
        time.sleep(1)
    to_excel(data_list)


if __name__ == '__main__':
    main()
    print('抓取成功!')

AI助手

        对于编程困难的同学,可以尝试使用Proxy302家的AI集成平台302.AI。它集合了市面上主流的AI工具,采用量贩化结算方式,在一个平台中自定义满足所有需求。注册登录之后,在控制面板左侧即可根据需求定制AI工具,之后即可按照实际流量计费使用,非常的方便快捷!由于都是Proxy302家的产品,所以余额也是共享的。通过它也可以辅助我们生成爬虫代码,快速获取数据。

总结

        通过上面的实战,我们可以看到代理服务可以大大提高爬虫的匿名性和效率。Proxy302的代理可以满足这两点需求。

        Proxy302提供动态IP和静态住宅IP两种代理。动态IP具备智能切换功能,可以自动更换代理IP,模拟真实用户行为,进一步降低被检测到的风险。同时根据业务需求,静态IP能够提供高稳定性和快速响应速度,确保数据采集的连续性和效率,不会因代理不稳定而中断。这些IP都具有高级别的匿名性,确保用户的真实IP地址不被暴露,保护隐私并避免被网站封禁,同时用户可以根据需求选择特定地区的代理IP,以适应区域特殊需求。

        这些优势使得Proxy302能够为电商平台爬虫的实现提供了强有力的支持。

        无论是匿名性、安全性还是效率,Proxy302都提供了丰富的功能和优质的用户体验,是企业和个人在数据采集领域的理想选择。数据采集对工具的需求十分苛刻,Proxy302的功能其实远不止这些,欢迎各位私信博主,跟我一起继续探讨。

  • 48
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yan-英杰

感谢大佬打赏,我会更加努力创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值