一个小型爬虫,可以根据给定的根关键字采集Amazon.com推荐的长尾关键字

优采云 发布时间: 2020-08-07 20:25

  前言

  今天的周末,在国庆节期间,我无事可做. 我将整理我之前编写的Amazon搜索框推荐的关键字采集工具. 总体而言,它是一个简单的小爬虫.

  因为它很小,所以它被编写在一个模块中,并且一个模块分为五种方法来完成整个采集器过程.

  网页下载方法,网页分析方法,将分析结果存储在txt文件中的方法,集成网页下载的方法以及在txt文件中存储的方法整个过程的组织方法主要内容1.涉及的类库

  import requests

import datetime

import time

  除了请求第三方库以外,上述库都是Python标准库. 第三方类库可以通过pip install +类库名称自动安装在cmd中. 前提是已配置python环境变量-windows.

  requests是Web下载库datetime是日期库. 在此示例中,它用于根据日期设置不同采集文件txt的名称. 定时时间库,主要使用睡眠方法,用于在采集不流畅时暂停程序的库2. 网页下载方法

  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)

  对于Web下载方法,只需设置错误捕获和错误重试功能,以使采集器在下载网页的过程中平稳运行.

  此外,经过多次尝试,此接口的抗攀爬程度非常弱. 只要不是*敏*感*词*采集,一般问题就不大. 如果您遇到诸如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格式,并且本体已从请求库的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文件中.

  当然,有人说您是否可以使用多线程,但是该项目很小且不必要,并且Amazon的关键字推荐不会经常更新. 而且,亚马逊的抗爬能力非常强大. 有兴趣的人可以自己尝试.

  结束

  这是我分享的第一个与Amazon Seller相关的采集器工具. 配置完python程序后,将其复制并粘贴以使用.

  如果与亚马逊卖家相关的朋友已经看过此博客文章,并且对与亚马逊卖家相关的工具的开发感兴趣的朋友,则可以通过私人消息进行交流.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线