关键句采集 原创(【干货】亚马逊搜索框所推荐关键词采集工具(一))

优采云 发布时间: 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程序后,复制粘贴即可使用。

  如果亚马逊卖家相关的朋友看过这篇博文,以及对亚马逊卖家相关工具开发感兴趣的朋友,可以私信交流。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线