文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用Python获取亚马逊商品信息

2023-06-26 06:47

关注

这篇文章将为大家详细讲解有关怎么用Python获取亚马逊商品信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

引言

        亚马逊网站相较于国内的购物网站,可以直接使用python的最基本的requests进行请求。访问不是过于频繁,在未触发保护机制的情况下,可以获取我们想要的数据。本次通过以下三部分简单介绍下基本爬取流程:

使用requests的get请求,获取亚马逊列表和详情页的页面内容使用css/xpath对获取的内容进行解析,取得关键数据动态IP的作用及其使用方法

一、获取亚马逊列表页的信息

以游戏区为例:

怎么用Python获取亚马逊商品信息

        获取列表内能获取到的商品信息,如商品名,详情链接,进一步获取其他内容。

        用requests.get()获取网页内容,设置好header,利用xpath选择器选取相关标签的内容:

import requestsfrom parsel import Selectorfrom urllib.parse import urljoin spiderurl = 'https://www.amazon.com/s?i=videogames-intl-ship'headers = {    "authority": "www.amazon.com",    "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",}resp = requests.get(spiderurl, headers=headers)content = resp.content.decode('utf-8')select = Selector(text=content)nodes = select.xpath("//a[@title='product-detail']")for node in nodes:    itemUrl = node.xpath("./@href").extract_first()    itemName = node.xpath("./div/h3/span/text()").extract_first()    if itemUrl and itemName:        itemUrl = urljoin(spiderurl,itemUrl)#用urljoin方法凑完整链接        print(itemUrl,itemName)

        此时已经获取的当前列表页目前能获得的信息: 

怎么用Python获取亚马逊商品信息

二、获取详情页信息

 进入详情页:

怎么用Python获取亚马逊商品信息

        进入详情页之后,能获得更多的内容

        用requests.get()获取网页内容,css选取相关标签的内容:

res = requests.get(itemUrl, headers=headers)content = res.content.decode('utf-8')Select = Selector(text=content)itemPic = Select.css('#main-image::attr(src)').extract_first()itemPrice = Select.css('.a-offscreen::text').extract_first()itemInfo = Select.css('#feature-bullets').extract_first()data = {}data['itemUrl'] = itemUrldata['itemName'] = itemNamedata['itemPic'] = itemPicdata['itemPrice'] = itemPricedata['itemInfo'] = itemInfoprint(data)

         此时已经生成详情页数据的信息:

怎么用Python获取亚马逊商品信息

        目前涉及到的就是最基本的requests请求亚马逊并用css/xpath获取相应的信息。

三、代理设置 

        目前,国内访问亚马逊会很不稳定,我这边大概率会出现连接不上的情况。如果真的需要去爬取亚马逊的信息,最好使用一些稳定的代理,我这边自己使用的是ipidea的代理,可以白嫖50M流量。如果有代理的话访问的成功率会高,速度也会快一点。         

        代理使用有两种方式,一是通过api获取IP地址,还有用账密的方式使用,方法如下:

3.1.1 api获取代理

怎么用Python获取亚马逊商品信息

怎么用Python获取亚马逊商品信息

3.1.2 api获取ip代码

def getProxies():    # 获取且仅获取一个ip    api_url = '生成的api链接'    res = requests.get(api_url, timeout=5)    try:        if res.status_code == 200:            api_data = res.json()['data'][0]            proxies = {                'http': 'http://{}:{}'.format(api_data['ip'], api_data['port']),                'https': 'http://{}:{}'.format(api_data['ip'], api_data['port']),            }            print(proxies)            return proxies        else:            print('获取失败')    except:        print('获取失败')

3.2.1 账密获取代理 

         因为是账密验证,所以需要 去到账户中心填写信息创建子账户:

怎么用Python获取亚马逊商品信息

怎么用Python获取亚马逊商品信息

         创建好子账户之后,根据账号和密码获取链接:

3.2.2 账密获取代理代码

# 获取账密ipdef getAccountIp():    # 测试完成后返回代理proxy    mainUrl = 'https://api.myip.la/en?json'    headers = {        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",    }    entry = 'http://{}-zone-custom{}:proxy.ipidea.io:2334'.format("帐号", "密码")    proxy = {        'http': entry,        'https': entry,    }    try:        res = requests.get(mainUrl, headers=headers, proxies=proxy, timeout=10)        if res.status_code == 200:            return proxy    except Exception as e:        print("访问失败", e)        pass

        使用代理之后,亚马逊商品信息的获取改善了不少,之前代码会报各种连接失败的错误,在requests请求之前调用代理获取的方法,方法return回代理ip并加入requests请求参数,就可以实现代理请求了。

四、全部代码

# coding=utf-8 import requestsfrom parsel import Selectorfrom urllib.parse import urljoin def getProxies():    # 获取且仅获取一个ip    api_url = '生成的api链接'    res = requests.get(api_url, timeout=5)    try:        if res.status_code == 200:            api_data = res.json()['data'][0]            proxies = {                'http': 'http://{}:{}'.format(api_data['ip'], api_data['port']),                'https': 'http://{}:{}'.format(api_data['ip'], api_data['port']),            }            print(proxies)            return proxies        else:            print('获取失败')    except:        print('获取失败') spiderurl = 'https://www.amazon.com/s?i=videogames-intl-ship'headers = {    "authority": "www.amazon.com",    "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",}proxies = getProxies()resp = requests.get(spiderurl, headers=headers, proxies=proxies)content = resp.content.decode('utf-8')select = Selector(text=content)nodes = select.xpath("//a[@title='product-detail']")for node in nodes:    itemUrl = node.xpath("./@href").extract_first()    itemName = node.xpath("./div/h3/span/text()").extract_first()    if itemUrl and itemName:        itemUrl = urljoin(spiderurl,itemUrl)        proxies = getProxies()        res = requests.get(itemUrl, headers=headers, proxies=proxies)        content = res.content.decode('utf-8')        Select = Selector(text=content)        itemPic = Select.css('#main-image::attr(src)').extract_first()        itemPrice = Select.css('.a-offscreen::text').extract_first()        itemInfo = Select.css('#feature-bullets').extract_first()        data = {}        data['itemUrl'] = itemUrl        data['itemName'] = itemName        data['itemPic'] = itemPic        data['itemPrice'] = itemPrice        data['itemInfo'] = itemInfo        print(data)

        通过上面的步骤,可以实现最基础的亚马逊的信息获取。

        目前只获得最基本的数据,若想获得更多也可以自行修改xpath/css选择器去拿到你想要的内容。而且稳定的动态IP能是你进行请求的时候少一点等待的时间,无论是编写中的测试还是小批量的爬取,都能提升工作的效率。以上就是全部的内容。 

关于“怎么用Python获取亚马逊商品信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯