用Python获取Amazon亚马逊的商品信息
引言
亚马逊网站相较于国内的购物网站,可以直接使用python的最基本的requests进行请求。访问不是过于频繁,在未触发保护机制的情况下,可以获取我们想要的数据。本次通过以下三部分简单介绍下基本爬取流程:
- 使用requests的get请求,获取亚马逊列表和详情页的页面内容
- 使用css/xpath对获取的内容进行解析,取得关键数据
- 动态IP的作用及其使用方法
一、获取亚马逊列表页的信息
以游戏区为例:
获取列表内能获取到的商品信息,如商品名,详情链接,进一步获取其他内容。
用requests.get()获取网页内容,设置好header,利用xpath选择器选取相关标签的内容:
import requests
from parsel import Selector
from urllib.parse import urljoinspiderurl = '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/h2/span/text()").extract_first()if itemUrl and itemName:itemUrl = urljoin(spiderurl,itemUrl)#用urljoin方法凑完整链接print(itemUrl,itemName)
此时已经获取的当前列表页目前能获得的信息:
二、获取详情页信息
进入详情页:
进入详情页之后,能获得更多的内容
用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'] = itemUrl
data['itemName'] = itemName
data['itemPic'] = itemPic
data['itemPrice'] = itemPrice
data['itemInfo'] = itemInfo
print(data)
此时已经生成详情页数据的信息:
目前涉及到的就是最基本的requests请求亚马逊并用css/xpath获取相应的信息。
三、代理设置
目前,国内访问亚马逊会很不稳定,我这边大概率会出现连接不上的情况。如果真的需要去爬取亚马逊的信息,最好使用一些稳定的代理,我这边自己使用的是ipidea的代理,可以白嫖50M流量。如果有代理的话访问的成功率会高,速度也会快一点。
代理使用有两种方式,一是通过api获取IP地址,还有用账密的方式使用,方法如下:
3.1.1 api获取代理
3.1.2 api获取ip代码
def getProxies():# 获取且仅获取一个ipapi_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 proxieselse:print('获取失败')except:print('获取失败')
3.2.1 账密获取代理
因为是账密验证,所以需要 去到账户中心填写信息创建子账户:
创建好子账户之后,根据账号和密码获取链接:
3.2.2 账密获取代理代码
# 获取账密ip
def getAccountIp():# 测试完成后返回代理proxymainUrl = '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 proxyexcept Exception as e:print("访问失败", e)pass
使用代理之后,亚马逊商品信息的获取改善了不少,之前代码会报各种连接失败的错误,在requests请求之前调用代理获取的方法,方法return回代理ip并加入requests请求参数,就可以实现代理请求了。
四、全部代码
# coding=utf-8import requests
from parsel import Selector
from urllib.parse import urljoindef getProxies():# 获取且仅获取一个ipapi_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 proxieselse: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/h2/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'] = itemUrldata['itemName'] = itemNamedata['itemPic'] = itemPicdata['itemPrice'] = itemPricedata['itemInfo'] = itemInfoprint(data)
通过上面的步骤,可以实现最基础的亚马逊的信息获取。
目前只获得最基本的数据,若想获得更多也可以自行修改xpath/css选择器去拿到你想要的内容。而且稳定的动态IP能是你进行请求的时候少一点等待的时间,无论是编写中的测试还是小批量的爬取,都能提升工作的效率。以上就是全部的内容。
用Python获取Amazon亚马逊的商品信息相关推荐
- JAVA爬取亚马逊的商品信息
在程序里面输入你想爬取的商品名字,就可以返回这件商品在亚马逊搜索中都所有相关商品的信息,包括名字和价格. 解决了在爬取亚马逊时候,亚马逊可以识别出你的爬虫,并返回503,造成只能爬取几个页面的问题. ...
- Python批量采集亚马逊商品数据 (含完整源代码)
前言 嗨喽 ! 大家好吖,这里是魔王~ 亚马逊公司,是美国最大的一家网络电子商务公司,位于华盛顿州的西雅图 是网络上最早开始经营电子商务的公司之一,亚马逊成立于1994年 今天教大家用Python批量 ...
- python根据频率画出词云_利用pandas+python制作100G亚马逊用户评论数据词云
原标题:利用pandas+python制作100G亚马逊用户评论数据词云 数据挖掘入门与实战 公众号: datadw 我们手里面有一个差不多100G的亚马逊用户在购买商品后留下的评论数据(数据格式为j ...
- python + selenium在亚马逊下载产品主图
python + selenium 在亚马逊下载产品主图 下载的图片是1000像素的,即卖家上传的图片 import requests import xlwings from selenium imp ...
- Android支付接入(八):Amazon亚马逊支付
下面跟大家一起走一遍Amazon亚马逊的支付,亚马逊目前刚把业务拓展到大陆市场,但这并不代表Amazon支付不成熟,恰恰相反,Amazon的支付流程,支付结果获取及测试另人称赞,支付流程. ...
- Amazon亚马逊跨境电商信息与图片爬取
Amazon亚马逊跨境电商产品图片爬取 从BestSeller中获取热销排行产品链接 # -*- codeing = utf-8 -*- # @Time: 2021/1/10 11:50 # @Fil ...
- Amazon亚马逊卖家设置World First(WF卡)收款教程!
蚂蚁金服收购万里汇WorldFirst之后放出超级大招,万里汇WorldFirst针对所有跨境电商的新老客户,提现立享封顶0.3%费率,最低低至0.无论是现有的WF老客户还是新客户都能享受此优惠,现在 ...
- Amazon亚马逊常见的几种label
供应链中时常听到这样一个名词--label,中文意思是标签.标签种类多样,贯穿供应链的始终,每个行业,甚至每个企业所使用的标签都不尽相同.但无论是哪一种标签,其核心目的都是标记产品信息,从而提高企业的 ...
- 关于amazon亚马逊SP-API申请注册,amazon亚马逊SPAPI开发人员资料注册,amazon亚马逊Selling Partner API申请注册详细指导
关于amazon亚马逊SPAPI开发人员资料注册,amazon亚马逊开发人员资料申请注册,amazon亚马逊销售合作伙伴 API申请注册,amazon亚马逊SP-API申请注册,amazon亚马逊Se ...
最新文章
- linux 文件查找及定位
- 加油站会员管理系统源码php_分享一下:关于一对一直播源码的重要组成部分
- php收集radio表单,jQuery对于单选表单(radio)以及其它表单取值
- python软件安装步骤-一篇非常棒的安装Python及爬虫入门博文!
- html算术计算,js实现计算器 提供算术表达式求值
- Ocelot中使用Butterfly实践
- 第四章选择结构(二)
- 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
- java mysql nclob_java向oracle数据库Clob读取,写入数据
- linux crontab mysqlpump自动备份mysql 免输密码 --login-path
- P4177 [CEOI2008]order
- 42表盘直径是从哪测量_爱彼15703和15710区别在哪?背透和密底哪个更好?
- 10本编程书籍推荐!带你从入门到精通
- c++的学习——画矩形
- 云南省工信厅洪正华一行莅临红谷滩区·高通中国·影创联合创新中心考察调研
- 011_GoldWave软件安装及使用
- 小米真无线降噪耳机3和小米真无线降噪耳机3 Pro的区别
- php 拼团_详解在微信公众平台里实现微信拼团功能的步骤
- 鸿蒙源码图片,全网最全的鸿蒙源码结构分析(附自制4张架构图)
- (Java实习生)每日10道面试题打卡——Java基础知识篇