通过关键词采集文章采集api(【干货】亚马逊搜索框所推荐的关键词采集工具(一))

优采云 发布时间: 2022-02-04 06:16

  通过关键词采集文章采集api(【干货】亚马逊搜索框所推荐的关键词采集工具(一))

  前言

  本周末国庆值班期间,无事可做,整理发布之前写的亚马逊搜索框推荐的关键词采集工具。总的来说,它是一个简单的小爬虫。

  因为比较小,所以写在一个模块里,一个模块分成五个方法来完成整个爬取过程。

  网页下载方法 网页解析方法 将解析结果存入txt文件的方法 整合网页下载的方法及存入txt文件的方法 主要功能 组织整个流程的方法 主要内容一、 中涉及的类库

  import requests

import datetime

import time

  以上类库,除requests第三方类库外,均为Python标准库。第三方类库可以在cmd中通过pip install +类库名自动安装——前提是已经配置好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类型)外,还可以使用Pause和rest来缓解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方法转换为字典类型,所以可以直接以字典的形式访问。

  增加了一层判断。当解析出现错误时,会返回empty,以保证程序不会因为错误而影响整体运行。

  返回的内容存储方法,存储我们的 采集to 和过去的权重的 关键词

  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人工客服


线