获取子字符串Python inside list elements Web Scraping

2024-09-28 20:47:34 发布

您现在位置:Python中文网/ 问答频道 /正文

请原谅我对Python和Selenium还不熟悉。我正在抓取一个超市网站。我得到的项目名称如下,其中有数量与名称。我想把不同箱子和物品的数量从名称中减去如下-

案例

鲜香芋250g

鲜值香蕉罗布斯塔1kg

鲜值生木瓜1 U(单位)(300 g-400 g)

Kabul优质新鲜石榴(500克-700克)

需要输出:

名称=鲜值香芋,数量=250g

名称=鲜值香蕉Robusta,数量=1kg

名称-鲜值生木瓜,数量=1U(单位)(300g-400g)

它有成百上千的类似物品。我试过用

str.split()

但没有得到输出。我也尝试过使用regex,但不确定它是如何工作的。有没有一种方法可以在我找到字符串中的一个数字后拆分字符串? 任何建议都可能有帮助。在


Tags: 字符串名称数量网站selenium单位物品案例
3条回答

一个选项(根据您提供的数据示例)可以是:

import re
strings = ['Fresh Value Colocasia 250g', 'Fresh Value Banana Robusta 1kg', 'Fresh Value Raw Papaya 1 U (units) (300g-400g)','Fresh Value Premium Pomegranate Kabul (500g - 700g)']
for i in strings:
    start = re.findall('\d|\(', i)[0]
    name = i.split(start)[0].strip()
    quantity = start + i.split(start)[1]
    print 'Name = '+ name + ', Quantity = ', quantity

输出:

^{pr2}$

当然,如果数字和括号只出现在数量中,而不在名称中,它是有效的。如果数量以其他符号开头,则可以将它们添加到findall

import re
def substring(string):
    output = {}
    name = string.split()[0]
    for i in range(1,len(string.split())):
        if len(re.findall('\d', string.split()[i]))==0:
            name = name + " " + string.split()[i]
        else:
            quantity = " ".join(string.split()[i:])
            break
    output["Name"] = name
    output["Quantity"] = quantity
    return output

然后将字符串放入该函数中,如下所示:

^{pr2}$

你将得到:

{'Name':'新鲜值生木瓜','数量':'1U(单位)(300g-400g)}

你也可以试试这个:

def split_unit(stri):
    to_split = re.findall("\\d+",stri)[0]
    splitted = to_split + stri.split(to_split,1)[1]
    print(splitted)

split_unit("Fresh Value Colocasia 250g") #outputs : 250 g
split_unit("Fresh Value Banana Robusta 1kg") #outputs : 1Kg
split_unit("Fresh Value Raw Papaya 1 U (units) (300g-400g)") # outputs:1 U 
                                     #(units) (300g-400g) 

以此类推,我所做的是,首先在函数内部的第一行使用regex,找到字符串中第一个出现的intiger。和使用结构分裂()方法拆分第一个整数后的所有字符,并将其与第一个整数的to_split合并。在

相关问题 更多 >