关键句采集 原创(【干货】亚马逊搜索框所推荐关键词采集工具(一))
优采云 发布时间: 2021-09-03 11:12关键句采集 原创(【干货】亚马逊搜索框所推荐关键词采集工具(一))
前言
今天周末,国庆轮班,无事可做,整理发布了亚马逊搜索框推荐的关键词采集工具。总的来说就是一个简单的小爬虫。
因为小,所以写在一个模块中,一个模块分成五个方法来完成整个爬取过程。
网页下载方法 网页分析方法 将分析结果存入txt文件的方法 将网页下载并存入txt文件的方法 main函数组织整个过程的方法 主要内容一、涉及的类库
import requests
import datetime
import time
以上库,除requests第三方库外,均为Python标准库。第三方类库,可以通过pip install+类库名在cmd中自动安装-前提是python环境变量-windows已经配置好。
requests 是网络下载库 datetime 是日期库。本例中用于根据日期设置不同的采集文件txt名称时间时间库。主要使用sleep方式,用于采集不畅时,暂停程序库二、网页下载方式
def get_suggestion(url, sleep=5, retry=3):
try:
r = requests.get(url, timeout=10)
if r.json:
return r.json()
else:
print('网站返回信息为空,当前检索失败')
if retry>=0:
print('正在重新请求')
time.sleep(sleep)
retry -= 1
return get_suggestion(url, retry)
except (requests.ConnectTimeout,requests.ReadTimeout, requests.ConnectionError) as e:
print('超时: %s' % str(e))
if retry>=0:
print('正在重试')
time.sleep(sleep)
retry -= 1
return get_suggestion(url, retry)
对于网页下载方式,只需设置错误捕捉和错误重试功能,即可让爬虫在下载网页的过程中流畅运行。
另外,经过多次尝试,这个界面的防爬度很弱。只要不是*敏*感*词*的采集,一般问题不大。如果遇到Robot Check等验证,除了改IP(https类型),还可以休息一下,降低Robot Check概率。
而且亚马逊的关键词推荐,经过观察,更新频率不是很高,普通的采集个人速度完全可以满足需求。
三、网页解析方法,解析出我们需要的内容
def parse_suggestion(js_html):
try:
suggestions = js_html.get('suggestions')
keywords_list = [keyword.get('value') for keyword in suggestions]
return keywords_list
except Exception as e:
return
分析网页返回的信息,所以类信息是json格式,本体已经从requests库的json方法转成字典类型,所以可以直接以如下形式访问一本字典。
增加了一层判断,当解析出错时,返回空,保证程序不会因为出错而影响整体运行
返回的内容存储方式,存储我们采集已经达到并且已经很重的关键词
def save_suggestion(keyword):
# 以天为单位分离采集结果
with open('Amazon Suggest Keywords_{}.txt'.format(datetime.now().date()), 'a+') as f:
f.write(keyword+'\n')
比较简单,不用多说。打开或创建一个txt文件,调用write方法写入对应的关键词,并在每个关键词后添加换行符
四、集成网页下载保存到txt文件的方法,供以后调用
def get_and_save(url, suggested_keywords):
rq_json = get_suggestion(url)
suggestion_list = parse_suggestion(rq_json)
if suggestion_list:
for suggestion in suggestion_list:
print('#' * 80)
print('正在判断当前关键词:%s' % suggestion)
if suggestion in suggested_keywords:
print('当前关键词:%s 重复' % suggestion)
continue
else:
save_suggestion(suggestion)
print('当前关键词:%s 存储成功' % suggestion)
suggested_keywords.append(suggestion)
else:
print('亚马逊返回信息为空,当前关键词长尾词采集失败')
因此,部分代码在主程序中会被多次调用,所以单独组织成一个方法。
增加一个if判断,保证只有在关键词显式返回时才调用存储方法。
这一步还增加了一个判断,判断当前检索到的关键词是否已经是采集,如果已经是采集,则放弃
五、组织整个程序的主要功能
def main(prefix_or_prefix_list):
url = 'https://completion.amazon.com/api/2017/suggestions?&client-info=amazon-search-ui&' \
'mid=ATVPDKIKX0DER&alias=aps&b2b=0&fresh=0&ks=83&prefix={}&suggestion-type=keyword&fb=1'
suggested_keywords = []
# 定义一个空列表,以存储已采集过的关键词
if isinstance(prefix_or_prefix_list, str):
# 传入的是一个词
final_url = url.format(prefix_or_prefix_list)
get_and_save(final_url, suggested_keywords)
for depth_keywords in suggested_keywords:
# 将已采集过的 keywords 做再次采集,依旧是重复的剔除
get_and_save(url.format(depth_keywords),suggested_keywords)
elif isinstance(prefix_or_prefix_list, list):
# 传入的是一个由许多单词组成的列表| tuple 也是可以的,只要是一个可以迭代的有序序列都可以。但是如果是一个 orderedDict的话,那就需要改写部分代码了。
for prefix in prefix_or_prefix_list:
final_url = url.format(prefix)
get_and_save(final_url, suggested_keywords)
for depth_keywords in suggested_keywords:
get_and_save(url.format(depth_keywords), suggested_keywords)
else:
print('参数传入错误,本程序只接受单个关键词或者关键词序列为参数')
if __name__ == '__main__':
_prefix = 'iphone case'
_prefix_list = ['iphone case', 'iphone charger']
main(_prefix)
main函数接收一个prefix_or_prefix_list参数,表示这个程序可以是采集关键词单独的一个长尾词,也可以是关键词采集的一系列。
内置的isinstance方法用于判断传入参数的类型,根据类型使用不同的采集配置。
这个程序运行时间长,需要轮询每一条关键词信息。但是采用了即时采集即时存储的策略,可以随时中断程序的运行,采集的话已经存储在相应的txt文件中。
当然有人说能不能用多线程,但是项目小,没必要,亚马逊关键词推荐的更新也不是那么频繁。而且,亚马逊的抗爬能力极其强大。有兴趣的可以自行尝试。
结束
这是我分享的第一个亚马逊卖家相关爬虫工具。配置好python程序后,复制粘贴即可使用。
如果亚马逊卖家相关的朋友看过这篇博文,以及对亚马逊卖家相关工具开发感兴趣的朋友,可以私信交流。