我正在从一个网站上抓取数据,并试图从网站上的数据创建一个表。然而,网页可能有多种结构,因此我有这样做的困难
到目前为止,我遇到的两种不同类型的结构是:
text1 = ['\nPie\n Type\n\xa0\nMain\n Ingrediënt\n\xa0\nCountry\n of Origin', '\nApplie\n Pie\n\xa0\nApples\n\xa0\nUnited\n Kingdom']
及
text2 = ['\n\nPie Type\n\n\nMain Ingrediënt\n\n\nCountry of Origin\n\n', '\n\nApple Pie\n\n\nApples\n\n\nUnited Kingdom\n\n']
到目前为止,使用以下代码:
for x in range(len(text1)):
try:
y = text1[x].strip().split('\xa0')
tlist = []
for p in y:
lst = p.replace('\n ', ' ').replace('\n', '')
tlist.append(lst)
dflist.append(tlist)
except:
dflist.append('X')
text1将返回以下输出:
[['Pie Type', 'Main Ingrediënt', 'Country of Origin'], ['Applie Pie', 'Apples', 'United Kingdom']]
这也是我希望文本2返回的内容。但在text2上使用相同的代码将返回:
[['Pie TypeMain IngrediëntCountry of Origin'], ['Apple PieApplesUnited Kingdom']]
因为它包含\n\n\n
而不是\n\xa0\n
我曾尝试使用if语句来确定数据是否包含这两个语句中的任何一个,但如果使用if '\xa0' in text1:
,这似乎不起作用
有谁能帮我用一个正则表达式函数来将这两个函数转换成所需的结构,或者帮我想出另一种方法来解决这个问题
谢谢
编辑: 感谢所有及时回答这个问题的人。不幸的是,你的回答都没有给我提供我想要的结果,但我回答了我自己的问题。如果stackoverflow允许,我将在2天内接受它作为答案,除非我收到另一个有效的答案
编辑: Suneesh Jacob和RJ Adriaansen都为这个问题提供了有效的代码解决方案。我决定对答案计时,并接受最快的答案为最佳答案
结果:
def decode(data):
return [[j.replace('\n ',' ').strip() for j in re.split(r'\n\n\n|\n\xa0\n',i)] for i in data]
result:
0.07250859999999999
及
def clean_list(lst):
lst = [re.split('\n\n\n|\n\xa0\n',i) for i in lst]
return [[' '.join(i.split()) for i in sublist] for sublist in lst]
result:
0.0712564
谢谢大家!
在您的情况下不需要正则表达式,只需执行此操作并在拆分之前添加替换即可
而不是
使用正则表达式,可以指定多个分隔符:
print(clean_list(text1), clean_list(text2))
:您可以尝试以下方法:
相关问题 更多 >
编程相关推荐