【问题标题】:Splitting strings in a list by the first 10 characters, Python按前 10 个字符拆分列表中的字符串,Python
【发布时间】:2021-09-07 03:48:56
【问题描述】:

我正在尝试获取亚马逊上每个产品的 ASIN 号,它是 dp/ 之后的前十位数字。我已经到了我有数字但后面仍然有垃圾的地步。有什么帮助吗?

   product_lst = [
            "https://www.amazon.com/Bentgo-Kids-Prints-Camouflage-5-Compartment/dp/B07R2CNSTK/ref=zg_bs_toys-and-games_home_2?_encoding=UTF8&psc=1&refRID=S3ESVW604M2GF8VYYVAZ",
            "https://www.amazon.com/Hamdol-Inflatable-Swimming-Sprinkler-Full-Sized/dp/B08SLYY1WD/?_encoding=UTF8&smid=AYKJMONAWDIKA&pf_rd_p=287d7433-71c6-4904-99b3-55833d0daaa0&pd_rd_wg=lMKJu&pf_rd_r=CR8F460JV643467SAG8Q&pd_rd_w=KgWnp&pd_rd_r=0e298b4a-6e52-4688-87bb-482fb6c1a56b&ref_=pd_gw_deals",
            "https://www.amazon.com/Fire-TV-Stick-4K-with-Alexa-Voice-Remote/dp/B079QHML21?ref=deals_primeday_deals-grid_slot-5_21f9_dt_dcell_img_0_ca4a9dae",
            "https://www.amazon.com/dp/B089RDSML3",
            "https://www.amazon.com/Lucky-Brand-Burnout-Notch-Shirt/dp/B081J8SGH7/ref=sr_1_2?dchild=1&pf_rd_i=7147441011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=e6aa97f3-9bc4-42c5-ac38-37844f71b469&pf_rd_r=S2F3A95JN2FDGBQ4V048&pf_rd_s=merchandised-search-9&pf_rd_t=101&qid=1624427428&s=apparel&sr=1-2"
        ]
for url in product_lst:
    product_lst = url.split("dp/")
    for url in product_lst:
        del product_lst[::2]
    print(product_lst)

输出:

['B07R2CNSTK/ref=zg_bs_toys-and-games_home_2?_encoding=UTF8&psc=1&refRID=S3ESVW604M2GF8VYYVAZ'] [ 'B08SLYY1WD / 编码= UTF8&SMID = AYKJMONAWDIKA&pf_rd_p = 287d7433-71c6-4904-99b3-55833d0daaa0&pd_rd_wg = lMKJu&pf_rd_r = CR8F460JV643467SAG8Q&pd_rd_w = KgWnp&pd_rd_r = 0e298b4a-6e52-4688-87bb-482fb6c1a56b&REF EM> = pd_gw_deals'],点击 ['B079QHML21?ref=deals_primeday_deals-grid_slot-5_21f9_dt_dcell_img_0_ca4a9dae'] ['B089RDSML3'] [ 'B081J8SGH7 / REF = sr_1_2?dchild = 1&pf_rd_i = 7147441011&pf_rd_m = ATVPDKIKX0DER&pf_rd_p = e6aa97f3-9bc4-42c5-ac38-37844f71b469&pf_rd_r = S2F3A95JN2FDGBQ4V048&pf_rd_s =商品化搜索-9&pf_rd_t = 101&QID = 1624427428&S =服饰&SR = 1-2'] P>

【问题讨论】:

标签: python list split


【解决方案1】:

对于文本搜索,module re (regex) 是一个不错的选择:

product_lst = [
"https://www.amazon.com/Bentgo-Kids-Prints-Camouflage-5-Compartment/dp/B07R2CNSTK/ref=zg_bs_toys-and-games_home_2?_encoding=UTF8&psc=1&refRID=S3ESVW604M2GF8VYYVAZ",
"https://www.amazon.com/Hamdol-Inflatable-Swimming-Sprinkler-Full-Sized/dp/B08SLYY1WD/?_encoding=UTF8&smid=AYKJMONAWDIKA&pf_rd_p=287d7433-71c6-4904-99b3-55833d0daaa0&pd_rd_wg=lMKJu&pf_rd_r=CR8F460JV643467SAG8Q&pd_rd_w=KgWnp&pd_rd_r=0e298b4a-6e52-4688-87bb-482fb6c1a56b&ref_=pd_gw_deals",
"https://www.amazon.com/Fire-TV-Stick-4K-with-Alexa-Voice-Remote/dp/B079QHML21?ref=deals_primeday_deals-grid_slot-5_21f9_dt_dcell_img_0_ca4a9dae",
"https://www.amazon.com/dp/B089RDSML3",
"https://www.amazon.com/Lucky-Brand-Burnout-Notch-Shirt/dp/B081J8SGH7/ref=sr_1_2?dchild=1&pf_rd_i=7147441011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=e6aa97f3-9bc4-42c5-ac38-37844f71b469&pf_rd_r=S2F3A95JN2FDGBQ4V048&pf_rd_s=merchandised-search-9&pf_rd_t=101&qid=1624427428&s=apparel&sr=1-2"
]

import re

results = []
for url in product_lst:
    m = re.search(r"/dp/([^/?]+)",url)
    if m:
        results.append(m.groups()[0])
print(results)

输出:

['B07R2CNSTK', 'B08SLYY1WD', 'B079QHML21', 'B089RDSML3', 'B081J8SGH7']

我使用r"/dp/([^/?]+)" 作为模式,归结为/dp/ 之后的任何内容的分组匹配,然后匹配下一个/? 之前的所有内容。

你可以在线测试正则表达式——我使用http://regex101.com(用于复杂的)——它甚至可以根据你在其字段中插入的内容提供python代码(虽然不使用它;o))


您可以将自己的代码更改为

for url in product_lst:
    part = url.split("dp/")
    if len(part) > 1:            # blablubb dp/ more things => 2 or more parts
        print(part[1])           # print whats is left after dp/

为了避免覆盖您的列表product_lst - 但是您仍然需要在 / 和 ?用它。

【讨论】:

    【解决方案2】:

    split()'dp/' 之后,绝对没有理由循环。您确切地知道您想要的数据在哪里,所以直接获取它:

       product_lst = [
                "https://www.amazon.com/Bentgo-Kids-Prints-Camouflage-5-Compartment/dp/B07R2CNSTK/ref=zg_bs_toys-and-games_home_2?_encoding=UTF8&psc=1&refRID=S3ESVW604M2GF8VYYVAZ",
                "https://www.amazon.com/Hamdol-Inflatable-Swimming-Sprinkler-Full-Sized/dp/B08SLYY1WD/?_encoding=UTF8&smid=AYKJMONAWDIKA&pf_rd_p=287d7433-71c6-4904-99b3-55833d0daaa0&pd_rd_wg=lMKJu&pf_rd_r=CR8F460JV643467SAG8Q&pd_rd_w=KgWnp&pd_rd_r=0e298b4a-6e52-4688-87bb-482fb6c1a56b&ref_=pd_gw_deals",
                "https://www.amazon.com/Fire-TV-Stick-4K-with-Alexa-Voice-Remote/dp/B079QHML21?ref=deals_primeday_deals-grid_slot-5_21f9_dt_dcell_img_0_ca4a9dae",
                "https://www.amazon.com/dp/B089RDSML3",
                "https://www.amazon.com/Lucky-Brand-Burnout-Notch-Shirt/dp/B081J8SGH7/ref=sr_1_2?dchild=1&pf_rd_i=7147441011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=e6aa97f3-9bc4-42c5-ac38-37844f71b469&pf_rd_r=S2F3A95JN2FDGBQ4V048&pf_rd_s=merchandised-search-9&pf_rd_t=101&qid=1624427428&s=apparel&sr=1-2"
            ]
    for url in product_lst:
        split_lst = url.split("dp/")
        print(split_lst[1][:10]
    

    我假设 ASIN 始终为 10 个字符。如果有更多字符,请调整拼接并且它始终是固定的。否则,您将需要找到不同的方法。

    【讨论】:

      【解决方案3】:

      无需拆分数据,直接获取ASIN。

      product_lst = [
                  "https://www.amazon.com/Bentgo-Kids-Prints-Camouflage-5-Compartment/dp/B07R2CNSTK/ref=zg_bs_toys-and-games_home_2?_encoding=UTF8&psc=1&refRID=S3ESVW604M2GF8VYYVAZ",
                  "https://www.amazon.com/Hamdol-Inflatable-Swimming-Sprinkler-Full-Sized/dp/B08SLYY1WD/?_encoding=UTF8&smid=AYKJMONAWDIKA&pf_rd_p=287d7433-71c6-4904-99b3-55833d0daaa0&pd_rd_wg=lMKJu&pf_rd_r=CR8F460JV643467SAG8Q&pd_rd_w=KgWnp&pd_rd_r=0e298b4a-6e52-4688-87bb-482fb6c1a56b&ref_=pd_gw_deals",
                  "https://www.amazon.com/Fire-TV-Stick-4K-with-Alexa-Voice-Remote/dp/B079QHML21?ref=deals_primeday_deals-grid_slot-5_21f9_dt_dcell_img_0_ca4a9dae",
                  "https://www.amazon.com/dp/B089RDSML3",
                  "https://www.amazon.com/Lucky-Brand-Burnout-Notch-Shirt/dp/B081J8SGH7/ref=sr_1_2?dchild=1&pf_rd_i=7147441011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=e6aa97f3-9bc4-42c5-ac38-37844f71b469&pf_rd_r=S2F3A95JN2FDGBQ4V048&pf_rd_s=merchandised-search-9&pf_rd_t=101&qid=1624427428&s=apparel&sr=1-2"
                   ]
      
      ASIN=[]
      for url in product_lst:
          idx = url.find("/dp/")
          ASIN.append(url[idx+4:idx+14])
      
      print(ASIN)
      

      输出

      ['B07R2CNSTK', 'B08SLYY1WD', 'B079QHML21', 'B089RDSML3', 'B081J8SGH7']
      

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多