Python requests 抓取AWS收录排名


Python requests 抓取AWS收录排名

前文提要

根据python requests 以及 xpath语法 正则匹配语法
获取页面路由 解析页面中的ASIN 以及 第几页的排名情况

测试用 路由链接

查看(获取信息)

以美国站 搜索 iphone来查看

https://www.amazon.com/s?k=iphone&ref=nb_sb_noss

带Sponsored的广告排名

广告排名

点击跳转 查看路由信息

https://www.amazon.com/
Mkeke-iPhone-Pro-Screen-Protector/
dp/B08CTYNSX7/ref=sr_1_1_sspa?
dchild=1&keywords=iphone&
qid=1617787283&sr=8-1-spons&
psc=1&
smid=A3U8Y53UO7C38F&
spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyQVgyWEYxNjMwTTE3JmVuY3J5cHRlZElkPUEwNjAwNTk4MzhWN0dERVlYM1MzNiZlbmNyeXB0ZWRBZElkPUEwODgwMTMwMjhDMkFWNDZZRUVWRCZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU=

* dp/B08CTYNSX7/ref=sr_1_1_sspa?

自然排名

自然排名

路由解析

https://www.amazon.com/Tracfone-Apple-iPhone-Prepaid-Smartphone/dp/B08CL4CCG2/ref=sr_1_3?dchild=1&keywords=iphone&qid=1617787283&sr=8-3

* /dp/B08CL4CCG2/ref=sr_1_3?

使用代码获取排名

构造headers 请求url

def get_url(keyword):
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36",
        "authority": "www.amazon.com",
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "cookie": "session-id=131-1747394-2478939; i18n-prefs=USD; lc-main=en_US; ubid-main=135-8365978-8962108; session-token=xvpETHDUTSSp5nAFXoTx/d40nc8Vgp5Ge4deof1O1ki4bb6KWs+6KD9mPeHQWtJoRrVW9gCzZ3w+iY8HbjdFbcGxkqR1gTeTE7macaab72sZZwxZM/7BDpeqvJj2PFkt5x6j/cbbw6qKIXN0bkzLk+GvTh1JfF/uTids1d48X/Wzmo44DmPdBex1oG0/UfGxU99fv3xwHCG3Tg+WBrHwFPAydLqSykeCjh+DaT4VDGXzzTCpEYNGnqzTPXy6c+Ri; session-id-time=2082787201l; skin=noskin; csm-hit=tb:SZ3FQ85SSJ24FJ8NH5TX+s-JYM350PT95NF3YRKMX7F|1615275047338&t:1615275047338&adb:adblk_yes",
        "Referer": 'www.google.com'
    }
    url = 'https://www.amazon.com/s?k={}&ref=nb_sb_noss'.format(keyword)  # 获取关键词 搜索页面 .com .cn
    resp = requests.get(url=url, headers=headers)  # 添加headers 否则会出现503
    return resp.content.decode('utf8')  # 返回页面 解码后

构造xpath 获取链接值

if __name__ == '__main__':
    keyword = "iphone"  # 关键词
    page = get_url(keyword)  # 调用解析url的函数

    xpath_grammar = ['//h2/a/@href', '//h2/a/span/text()']  # xpath_语法
    get_info(page, xpath_grammar)  # 调用获取数据的函数

构造re获取asin 与 排名

def get_info(page, country_mapper):
    """
    page : 目的解析html页面结构
    country_mapper : xpath_语法
    :return:
    """
    html = etree.HTML(page)
    url_list = html.xpath(country_mapper[0])  # a标签的href值
    span_list = html.xpath(country_mapper[1])  # span标签的值 暂无用到
    # 正则语法 1. 匹配ref   2. 匹配 %2F...
    re_grammar = [r'[\w]{10}/ref=\w+', r'[\w]{10}%2Fref%3D\w+']
    get_data(url_list, re_grammar)

获取广告排名/获取自然排名

def get_data(url_list, re_grammar):
    """
    :param url_list: 数据列表
    :param re_grammar: 正则表达式
    :return:
    """
    # print(url_list)
    pattern = re.compile(re_grammar[0])
    for text in url_list:  # 获取第一种方式
        get_format_info(pattern, text, 1)

    pattern2 = re.compile(re_grammar[1])
    for text2 in url_list:  # 获取第二种方式
        get_format_info(pattern2, text2, 2)

最终的格式

def get_format_info(pattern, text, to_num):
    """
    获取最终数据 格式的打印
    :param pattern: 正则语法 1 r'[\w]{10}/ref=\w+'
    :param pattern: 正则语法 2 r'[\w]{10}%2Fref%3D\w+'
    :param text: 字符串 语句
    :param to_num: 确认获取的是哪个
    :return:
    """
    info = pattern.search(text)
    if info is not None:
        if to_num == 1:
            split_info = str(info.group(0)).split('/')  # 以 / 切割
        else:
            split_info = str(info.group(0)).split('%2Fref%3D')  # 以 %2Fref%3D 切割
        asin_ranking_dict = {split_info[0]: split_info[1]}  # 格式 {"B085BGNQXR":"ref=sr_1_18"}
        asin = get_asin()  # 调用 获取asin函数
        for a in asin:
            for k, v in asin_ranking_dict.items():
                if a == k:
                    print(k + " - " + v)  # 结果输出

asin的对比排名

def get_asin():
    asin = [
        'B08CTYNSX7', 'B08D3VH7G8', 'B084GS5W9T', 'B08CL4CCG2', 'B07VSWLY55',
        'B07VSSS3ZN', 'B08L5NDJ8H', 'B08L5MJTCP', 'B084GS884N', 'B0875YBSLD'
    ]
    """
    # 打印结果
    B084GS5W9T - ref=sr_1_3
    B08CL4CCG2 - ref=sr_1_4
    B07VSWLY55 - ref=sr_1_5
    B07VSSS3ZN - ref=sr_1_6
    B08L5NDJ8H - ref=sr_1_7
    B08L5MJTCP - ref=sr_1_8
    B084GS884N - ref=sr_1_9
    B0875YBSLD - ref=sr_1_10
    B08CTYNSX7 - sr_1_1_sspa
    B08D3VH7G8 - sr_1_2_sspa
    """
    return asin

文章作者: 柒仔
文章链接: /article/20/
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaoLiu!
侵权声明: 若无意对您的文章造成侵权,请您留言,博主看到后会及时处理,谢谢。
评论-----昵称和邮箱必填,网址选填
  目录