提示:此工具基于selenium爬虫框架,故本机必须安装chrome浏览器

文章目录

  • 前言
  • 一、项目结构
  • 二、项目说明
    • 1.Main.py
    • 2.CheckChromeDriver.py
    • 3.config.json
    • 4.要查询的ASIN.txt
    • 5.chromedriver.exe
  • 三、使用步骤
  • 四、版本更新记录

前言

这里只贴出了源码,我们公司内部使用时打包成了exe文件,windows电脑可以直接运行,如有需要请下你的邮箱。

后续更新计划:
1.增加其他工具支持,比如JS
2.增加多线程,提高运行效率
3.词频统计,自动生成ST关键词,亚马逊标题,五点描述
4.开发Web版本


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目结构

一共是五个文件:

  1. Main.py - 主程序
  2. CheckChromeDriver.py - 检查chromedriver版本号
  3. config.json - 配置文件
  4. 要查询的Asin.txt - 放入需要查询的Asin
  5. chromedriver.exe - 爬虫支持程序

二、项目说明

1.Main.py

代码如下:

import os
import xlrd
import xlwt
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver.chrome.service import Service
import json
from xlutils.copy import copy
import CheckChromeDriver as ccdimport timedef getKeywordByAsin(asin, pagecount):browser.get('https://xp.sellermotor.com/selection/asin-query/query')keywordList = []# 切换站点country = browser.find_element(By.ID, 'search_country_code').get_attribute('data-value')if country != countryCode:js = '$("#search_country_code").attr("data-value","jp")'browser.execute_script(js)country = browser.find_element(By.ID, 'search_country_code').get_attribute('data-value')print("Current country:", country)# 输入Asinbrowser.find_element(By.XPATH, '//*[@id="search-keyword"]').send_keys(asin)# 点击查询browser.find_element(By.XPATH, '//*[@id="market-insight-search"]').click()# element = browser.find_element(By.CLASS_NAME, 'pagination')wait.until(presence_of_element_located((By.CLASS_NAME, 'page-item')))c = browser.find_elements(By.CLASS_NAME, 'page-item')page_count = c[len(c) - 2].textif page_count:next_click_count = int(page_count)else:next_click_count = 1print(next_click_count)title = Nonefor i in range(next_click_count):if i == pagecount:breakprint('------------------Page %s------------------' % (i))table = browser.find_element(By.ID, 'asinQueryTable')header = table.find_element(By.TAG_NAME, 'thead')body = table.find_element(By.TAG_NAME, 'tbody')rows = body.find_elements(By.TAG_NAME, 'tr')titles = header.find_elements(By.TAG_NAME, 'th')if title is None:title = []for ti in titles[0:len(titles) - 1]:title.append(ti.text)keywordList.append(title)print(title)for row in rows:cols = row.find_elements(By.TAG_NAME, 'td')keyWord = []for td in cols[0:len(cols) - 1]:keyWord.append(td.text)keywordList.append(keyWord)print(keyWord)nextPage = browser.find_element(By.CLASS_NAME, 'page-next')if nextPage.is_displayed():nextPage.click()print('ASIN %s,反查关键词一共 %s 个' % (asin, len(keywordList)))# print(keywordList)return keywordListdef start():chrome_options = webdriver.ChromeOptions()if headless:chrome_options.add_argument('--headless')  # 隐藏界面chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('-ignore-certificate-errors')chrome_options.add_argument('-ignore -ssl-errors')global browserservice = Service("chromedriver.exe")browser = webdriver.Chrome(service=service, options=chrome_options)global mainUrlmainUrl = 'https://xp.sellermotor.com/selection/category/index'browser.get(mainUrl)global waitwait = WebDriverWait(browser, 15)def login(user, pwd):browser.get(mainUrl)# print(f"browser text = {browser.page_source}")browser.find_element(By.ID, 'rc-tabs-0-tab-password').click()browser.find_element(By.ID, 'normal_login_username').send_keys(user)browser.find_element(By.ID, 'normal_login_password').send_keys(pwd)browser.find_element(By.XPATH, '//*[@id="normal_login"]/div[5]/div/div/div/button').click()wait = WebDriverWait(browser, 10)result = wait.until(presence_of_element_located((By.CLASS_NAME, 'username-hide-on-mobile')))def getConfig():if not os.path.exists('config.json'):return '文件不存在'try:with open("config.json", 'r') as f:config = json.load(f)except:config = {}return config# 保存结果到excel中
def save2Excel(asin, keywords, fileName):print('------------------ Save2Excel Start ------------------')print("fileName:", fileName)print("asin:", asin)print("keywordList:", keywords)if keywords: # 判断关键词结果是否为空if os.path.exists(fileName): # 判断excel文件是否存在,如果不存在则创建,如果存在则copyoldBook = xlrd.open_workbook(fileName)newBook = copy(oldBook)else:print("创建文件:", fileName)newBook = xlwt.Workbook(encoding='utf-8')worksheet = newBook.add_sheet(asin)# header = ['关键词', '月搜索量', '月点击量', '月点击量占比', '流量占比', '广告排名', '自然排名']# print(keywords[0])  # Asin:B0823LC5H1,关键词:resin,月搜索量:311599,月点击量:336526,月点击量占比:0.27%,流量占比:66.84%,广告排名:-,自然排名:1-29# for i in range(0, len(header)):  # 写入表头#     worksheet.write(0, i, label=header[i])  # write(行坐标,列坐标,内容)for j in range(len(keywords)):  # ASIN的多个关键词keywordRow = keywords[j]for k in range(len(keywordRow)):  # 列遍历worksheet.write(j, k, label=keywordRow[k])  # write(行坐标,列坐标,内容)newBook.save(fileName)print('------------------ Save2Excel End ------------------')def getAsins():with open('要查询的Asin.txt', 'r') as f:asins = f.read().split('\n')f.close()return asinsif __name__ == "__main__":ccd.init()config = getConfig()print(config)user = config.get('AccountInfo').get('account')pwd = config.get('AccountInfo').get('password')pageCount = config.get('PageCount')headless = config.get('headless')countryCode = config.get('countryCode')start()login(user, pwd)asins = getAsins()try:if asins:fileName = Nonefor asin in asins:KeyWordsLis = getKeywordByAsin(asin, pageCount)if fileName is None:time_tup = time.localtime(time.time())format_time = '%Y-%m-%d_%a_%H-%M-%S'cur_time = time.strftime(format_time, time_tup)fileName = './result/%s-KeyWords-%s.xls' % (countryCode, cur_time)save2Excel(asin, KeyWordsLis, fileName)print("执行完成")finally:browser.quit()

2.CheckChromeDriver.py

代码如下:

import winregimport requests
import re
import os
import zipfiledef get_latest_version(url):'''查询最新的Chromedriver版本'''rep = requests.get(url).texttime_list = []  # 用来存放版本时间time_version_dict = {}  # 用来存放版本与时间对应关系result = re.compile(r'\d.*?/</a>.*?Z').findall(rep)  # 匹配文件夹(版本号)和时间for i in result:time = i[-24:-1]  # 提取时间version = re.compile(r'.*?/').findall(i)[0]  # 提取版本号time_version_dict[time] = version  # 构建时间和版本号的对应关系,形成字典time_list.append(time)  # 形成时间列表latest_version = time_version_dict[max(time_list)][:-1]  # 用最大(新)时间去字典中获取最新的版本号return latest_versiondef download_driver(download_url):'''下载文件'''file = requests.get(download_url)with open("chromedriver.zip", 'wb') as zip_file:  # 保存文件到脚本所在目录zip_file.write(file.content)print('下载成功')def get_version():'''查询系统内的Chromedriver版本'''outstd2 = os.popen('chromedriver --version').read()return outstd2.split(' ')[1]def getChromeVersion():try:# 从注册表中获得版本号key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Google\Chrome\BLBeacon')_v, type = winreg.QueryValueEx(key, 'version')print('Current Chrome Version: {}'.format(_v))  # 这步打印会在命令行窗口显示return _vexcept WindowsError as e:print('check Chrome failed:{}'.format(e))def get_path():'''查询系统内Chromedriver的存放路径'''outstd1 = os.popen('where chromedriver').read()return outstd1.strip('chromedriver.exe\n')def unzip_driver(path):'''解压Chromedriver压缩包到指定目录'''f = zipfile.ZipFile("chromedriver.zip", 'r')for file in f.namelist():f.extract(file, path)def download(v):download_url = url + v + '/chromedriver_win32.zip'  # 拼接下载链接download_driver(download_url)path = './'print('替换路径为:', path)unzip_driver(path)print('更新后的Chromedriver版本为:', get_version())passdef init():chromeVersion = getChromeVersion()print('当前的chromed版本为:', chromeVersion)version = get_version()print('当前系统内的Chromedriver版本为:', version)latest_version = get_latest_version(url)print('最新的chromedriver版本为:', latest_version)if os.path.exists('chromedriver.exe'):if version == chromeVersion:print('当前Chromedriver与Chrome浏览器一致,无需更改')else:print('当前Chromedriver与Chrome浏览器不一致,需要进行更新')download(chromeVersion)else:print('未找到Chromedriver,需要下载')download(chromeVersion)
url = 'http://npm.taobao.org/mirrors/chromedriver/'
if __name__ == "__main__":init()

3.config.json

代码如下:

{"AccountInfo": {"account": "","password": ""},"PageCount": 5,"headless": 1,"countryCode": "us"
}
  1. AccountInfo:SellerMotor账号密码
  2. PageCount:要抓取的页数,SellerMotor默认一页是20条数据
  3. headless:浏览器窗口是否可见,1为不可见,0为可见
  4. countryCode:目标ASIN所属市场,“us”,“uk”,“de”,“fr”,“es”,“it”,“jp”,“ca”
  5. 该处使用的url网络请求的数据。

4.要查询的ASIN.txt

代码如下:

B08F7SBVBB
B07FPR3RNQ
B087X22DJN
B07RLJG3P4
B08BZBVFHR

一行只填写一个ASIN,并且需将多余的空行删除,注意此文件的名称不能修改,否则无法读取

5.chromedriver.exe

默认版本,且代码中会检查本机安装的Chrome浏览器版本和chromedriver版本是否匹配,如果不匹配会自动下载匹配的版本


三、使用步骤

第一步,配置参数:
将"config.json"用文本编辑器打开,填入SellerMotor账号以及其他参数,填写完成后保存

第二步,填入要查询的ASIN
将"要查询的Asin.txt"用文本编辑器打开,填入要查询的ASIN,注意不要填多了,否则会执行很久,建议一次查询不超过10个

第三步,双击执行"main.exe",等待控制台执行,执行完毕后会自动生成"关键词列表-xxxx.xls"的文件,这个就是最终的输出文件,所有爬取的关键词都在此文件中。

四、版本更新记录

  • 版本号:V1.0.3 更新时间2022年1月16日

     更新内容:1.增加chromedriver版本匹配功能2.优化文件写入代码,查询完一个Asin立即写入到excel中
    
  • 版本号:V1.0.2 更新时间2022年1月11日

     更新内容:1.增加目标市场配置2.增加使用说明
    
  • 版本号:V1.0.1 更新时间2022年12月23日

     更新内容:1.完成基础功能
    

Python开发亚马逊关键词获取工具相关推荐

  1. 如何优化亚马逊关键词,获取流量

    如果将亚马逊比作一个商场的话,那么你的店铺就相当于一个店面.所有的listing就是门.门越多流量入口就越多,销量才回提高.然而,门的位置很重要,有的在首页有的在第二页等,不同的位置,流量都是不一样的 ...

  2. 排名第一的亚马逊关键词工具

    如果你还不知道如何寻找并且确定属于自己产品的关键词,看完这篇文章你就会有所启发了. 做电商平台的,甚至可以说做网站SEO的人都知道,流量其实可以理解为搜索词的争夺.谁占据了搜索词下的靠前位置,意味着高 ...

  3. 亚马逊关键词上首页工具

    亚马逊关键词上首页主要是通过使用大量买家账号和IP进行搜索关键词加购.加心愿单来增加ASIN对应关键词的权重达到上首页目的. 需要准备的资料及条件: 1.大量买家账户:必须有大量账户,否则可能因为账户 ...

  4. 亚马逊关键词搜索API接口(item_search-按关键字搜索亚马逊商品接口),亚马逊API接口

    亚马逊关键词搜索API接口(item_search-按关键字搜索亚马逊商品接口),亚马逊API接口可以获取到整个页面上看的到的数据,包括:商品ID,商品标题,商品图片,优惠价,价格,价格范围,销量,卖 ...

  5. 亚马逊关键词分析怎么做 无经验也可以学

    亚马逊关键词是什么?其实就是你在listing中布局的关于产品的主要搜索词.这些会让客户在搜索相关词的时候,展现在客户的面前.如果没有相关的关键词布局,是肯定无法展现的.所以今天小编这篇: 挖掘对亚马 ...

  6. 亚马逊国际站获取全部商品分类

    目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处 ...

  7. 如何正确的进行亚马逊关键词研究

    本篇文章将提供实用的亚马逊关键词方法以及如何改进关键词搜索结果.您必须采取以下三个步骤来为您的亚马逊列表收集关键词信息: 第 1 步:寻找您的种子关键词 首先卖家应该找到四到五个种子关键词,这些是能够 ...

  8. 如何利用亚马逊关键词进行引流?权威关键词设置技巧来了

    利用关键词获取流量是运营店铺至关重要的一步,那么亚马逊卖家怎样设置关键词才能更高效精准地引流呢?本期的亚马逊运营知识,船长BI将为大家分享关于亚马逊关键词的设置技巧. 在掌握关键词设置技巧之前,必须弄 ...

  9. 亚马逊刊登php代码,最全的亚马逊刊登listing工具了解一下

    如果你是亚马逊FBA卖家,那么你可能会错过很多有用的亚马逊listing工具.这些listing工具可以批量上传listing,同时还可以记录产品特征,以及打印运输标签. 1.易仓刊登系统 易仓刊登系 ...

最新文章

  1. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法
  2. makefille的使用
  3. mysql中union all的order by问题
  4. symmetric-tree
  5. ie浏览器怎么打开html,Win10系统IE浏览器不能打开HTML怎么办
  6. React开发(148):componentWillReceiveProps
  7. java继承静态方法,是否在Java中继承了静态方法?
  8. 如何在同一台服务器上安装多套通达OA
  9. Maven实战读书笔记(3)
  10. 安装 opencv ubuntu_Ubuntu18.04安装 OpenCV4.3.0
  11. java多网卡组播,多网卡 组播
  12. 数据结构与算法(Leetcode链表篇)
  13. 慕尼黑工业大学计算机博士申请条件,慕尼黑大学博士条件
  14. twiproxy - 基于GTAP 0.4的twitter API proxy
  15. 一定要让你彻底明白什么是USB子系统
  16. 董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材
  17. Eclipse Embedded CDT
  18. 《VS如何解决Cannot find or open the PDB file问题》
  19. 超详细的张飞硬件90天读书笔记01
  20. Frameworks Brightness

热门文章

  1. DRF 序列化器的使用
  2. 【单目3D目标检测】SMOKE论文解析与代码复现
  3. 软件项目管理系统-外包管理-外包验收申请
  4. 怀化计算机职业学院,怀化职业技术学院
  5. 利用正则爬取猫眼电影
  6. 2021年中关村科技信贷和融资租赁支持资金申报条件及征集要求,补贴100万
  7. 【Excel】日期格式
  8. 2019ACM西安邀请赛总结
  9. android GMS认证之testGoogleDuoPreloaded
  10. Oracle 10g 的后台进程..