电商商品爬虫,亚马逊amazon采集源码
时间:2022-07-22
本文章向大家介绍电商商品爬虫,亚马逊amazon采集源码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
亚马逊是国际知名的电商平台,而国内访问的话是cn国内站点,不同的地区有不同的站点,每个商品有一个id号,不同地区商品是存在差异的!
亚马逊amazon商品数据采集有点类似于采集百度搜索结果信息,协议头非常重要,除了ua之外,cookies头需要携带,要不然不能访问,国内国外站点一样!
感觉网站存在反爬,尤其是英文站点,因为网页源码价格信息与实际前端页面看到的价格信息存在差异!
输入商品id号采集商品相关信息!
国内站(cn)采集
采集效果
附源码
#国内亚马逊商品爬虫
#20200213 by微信:huguo00289
# -*- coding=utf-8 -*-
import requests
from fake_useragent import UserAgent
import re,os,time
from lxml import etree
def ua():
ua=UserAgent()
headers={
'User-Agent':ua.random,
'Cookie': 'x-wl-uid=1eZRN4GNhENdZSGdOrvzQEy2WvlxT/sXztd0uB1drNz9lanSFUVkDtpyWsVQQfwSjhXmvZLrY67w=; session-id=459-1321777-5720413; ubid-acbcn=459-5647010-5360714; lc-acbcn=zh_CN; i18n-prefs=CNY; session-token=g6hxLDDoHhzZLHWxd7FnNbtphW7mG7zCPY29lJB7vwUfa73azlZ8jPh8iS6M+c/4mKa3c/d/Pzgiv61e7sJx858blgOf+pmyxOtu55z5AlVE2nRoPAyWFMeG4OKmZQI3Lg5/MNhcN71PW9x2OkQWWLOeqcikSKmxqaEQL9qGyYcnTbrYggdlInP0pROsR8oz; session-id-time=2082787201l; csm-hit=tb:s-KV6TYQQV77AQ5HHBPD94|1581595664859&t:1581595666568&adb:adblk_yes'
}
return headers
#保存txt
def tx(id,text,path):
print(f"正在保存商品数据..")
with open(f'{path}{id}.txt','w') as f:
f.write(text)
print(f">>>保存商品数据成功!")
#下载图片
def down(img_url,img_name,path):
ua = UserAgent()
headers = {'User-Agent': ua.random}
print(f"下载{img_name}图片..")
r=requests.get(img_url,headers=headers,timeout=10)
with open(f'{path}{img_name}','wb') as f:
f.write(r.content)
print(f">>>下载{img_name}图片完成!")
time.sleep(2)
def get_shopping(id):
url=f"https://www.amazon.cn/dp/{id}"
html=requests.get(url,headers=ua(),timeout=10).content.decode('utf-8')
time.sleep(3)
title=re.findall(r'"立即购买:(.+?)",',html,re.S)[0] #B&O PLAY by Bang & Olufsen Beoplay P6 便携式扬声器1140026 黑色
print(title)
path=f'{title}/'
os.makedirs(path,exist_ok=True) #创建目录
req=etree.HTML(html)
price=req.xpath('//span[@id="priceblock_ourprice"]/text()')[0]
print(price)
text='%s%s%s%s%s'%(url,'n',title,'n',price)
tx(id, text, path)
imgs=req.xpath('//span[@class="a-button-text"]/img/@src')
for img in imgs:
if 'jpg' in img:
imgurl=img.split('._')[0]
img_url =f'{imgurl}.jpg'
img_name = img_url.split('/')[-1]
print(img_url,img_name)
down(img_url, img_name, path)
if __name__=='__main__':
id=input("请输入要采集的商品id(比如:B00C3YADSK):")
get_shopping(id)
美国站(com)采集
我的展示页面
什么鬼我的配送不到?无价格显示?
不管了,价格pass
采集效果
附上源码参考:
#国外亚马逊商品爬虫
#20200213
#https://www.amazon.com/dp/B07S3659V2
# -*- coding=utf-8 -*-
import requests
from fake_useragent import UserAgent
import re,os,time,random
from lxml import etree
def ua():
ua=UserAgent()
sjs = random.randint(1111111, 9999999)
#print(sjs)
sj = str(sjs)
headers={
'User-Agent':ua.random,
'Cookie': f'x-wl-uid=1eZRN4GNhENdZSGdOrvzQEy2WvlxT/sXztd0uB1drNz9lanSFUVkDtpyWsVQQfwSjhXmvZLrY67w=; session-id=459-1321777-{sj}; ubid-acbcn=459-5647010-{sj}; lc-acbcn=zh_CN; i18n-prefs=CNY; session-token=g6hxLDDoHhzZLHWxd7FnNbtphW7mG7zCPY29lJB7vwUfa73azlZ8jPh8iS6M+c/4mKa3c/d/Pzgiv61e7sJx858blgOf+pmyxOtu55z5AlVE2nRoPAyWFMeG4OKmZQI3Lg5/MNhcN71PW9x2OkQWWLOeqcikSKmxqaEQL9qGyYcnTbrYggdlInP0pROsR8oz; session-id-time=2082787201l; csm-hit=tb:s-KV6TYQQV77AQ5HHBPD94|1581595664859&t:1581595666568&adb:adblk_yes'
}
return headers
#保存txt
def tx(id,text,path):
print(f"正在保存商品数据..")
with open(f'{path}{id}.txt','w',encoding='utf-8') as f:
f.write(text)
print(f">>>保存商品数据成功!")
#下载图片
def down(img_url,img_name,path):
ua = UserAgent()
headers = {'User-Agent': ua.random}
print(f"下载{img_name}图片..")
r=requests.get(img_url,headers=headers,timeout=10)
with open(f'{path}{img_name}','wb') as f:
f.write(r.content)
print(f">>>下载{img_name}图片完成!")
time.sleep(1)
def get_shopping(id):
#id="B07S3659V2"
#url="https://www.amazon.com/dp/B07S3659V2"
url=f"https://www.amazon.com/dp/{id}"
html=requests.get(url,headers=ua(),timeout=10).content.decode('utf-8')
#print(html)
time.sleep(2)
req = etree.HTML(html)
title=re.findall(r'<title>Amazon.com: (.+?)</title>',html,re.S)[0] #B&O PLAY by Bang & Olufsen Beoplay P6 便携式扬声器1140026 黑色
print(title)
path=f'{id}/'
os.makedirs(path,exist_ok=True) #创建目录
price=re.findall(r'"isPreorder":.+?,"price":(.+?),"doesMAPPolicyApply":.+?',html,re.S)[0]
price =f'${price}'
'''
try:
price=req.xpath('//span[@id="priceblock_saleprice"]/text()')[0]
except:
price = req.xpath('//span[@id="priceblock_ourprice"]/text()')[0]
'''
print(price)
productdescriptions=req.xpath('//div[@id="productDescription"]//text()')
productdescription='n'.join(productdescriptions)
text='%s%s%s%s%s%s%s'%(url,'n',title,'n',price,'n',productdescription)
tx(id, text, path)
imgs=req.xpath('//span[@class="a-button-text"]/img/@src')
for img in imgs:
if 'jpg' in img:
imgurl=img.split('._')[0]
img_url =f'{imgurl}.jpg'
img_name = img_url.split('/')[-1]
print(img_url,img_name)
down(img_url, img_name, path)
print(f">>>下载图片完毕!")
if __name__=='__main__':
#id="B07XR5TRSZ"
id=input("请输入要采集的商品id(比如:B07GJ2MWTZ):")
get_shopping(id)
- 【springboot】 springboot 整合mybatis-plus
- jfinal-swagger让你的应用接口更加简单
- 【springboot】 spring session 分布式会话共享
- 基于jfinal Template的Shiro 标签
- 基于Spring Cloud 少量配置完成单点登录开发
- Spring 必知概念(一)
- 如何在EHAB(EntLib)中定义”细粒度”异常策略?
- MVC、MVP以及Model2[下篇]
- Dora.Interception: 一个为.NET Core度身定制的AOP框架
- 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
- 关于Expression Tree和IL Emit的所谓的"性能差别"
- 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]
- 采用一个自创的"验证框架"实现对数据实体的验证[改进篇]
- Flash XSS检测脚本的简单实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux环境svn服务端及windows环境客户端安装配置
- 【Java集合-1】整体框架
- 【Java集合-2】HashMap简析
- 【Java集合-3】ArrayList简析
- Springboot之Security前后端分离登录
- Windows 10使用WSL作为python宿主机调试开发
- 小米正式开源 SQL 智能优化与改写工具 SOAR
- 【SpringBoot-1】面向小白编程:从0开始创建一个SpringBoot项目
- 【SpringBoot-3】Lombok使用详解
- 【JMeter系列-3】JMeter元件详解之配置元件
- 【JMeter-4】JMeter元件详解之逻辑控制器
- 【JMeter-4】JMeter关联:JMeter正则表达式提取器与JSON提取器
- 【JMeter系列-5】JMeter操作Mysql数据库
- 【JMeter系列-6】JMeter BeanShell Sampler与JMeter BeanShell断言
- 【JMeter系列-7】Linux下执行测试