拆分(“\ n”)和splitlines()都不能将字符串拆分为

时间:2016-12-01 16:32:18

标签: python html dataframe beautifulsoup html-parsing

我的问题很简单:如果以上两个命令都不能将字符串拆分成多行,这是否意味着什么都没有划分字符串?

我的例子非常深入,但简而言之:我使用BeautifulSoup解析了HTML表格中的特定数据,但是当我打印数据时,它只是一个混乱的字符串而不是整齐的表格格式。我尝试将其转换为Pandas DataFrame,但仍然没有成功。然后我尝试使用上面的命令来消除输出,但那些也失败了。这一切都让我相信它实际上必须是一个没有分隔符的连续字符串(尽管显然在表中它们是单独的条目)。

我很乐意帮助解决这个问题。我不确定我是否使用了错误的命令,或者我的数据是否真的难以使用。谢谢。

我的数据(以及我希望如何打印):

desired output

我的相关代码:

rows = table.findAll("tr")[1:2]
data = {
    'ID' : [],
    'Available Quota' : [],
    'Live Weight Pounds' : [],
    'Price' : [],
    'Date Posted' : []
}

for row in rows:
    cols = row.findAll("td")
    data['ID'].append(cols[0].get_text())
    data['Available Quota'].append(cols[1].get_text())
    data['Live Weight Pounds'].append(cols[2].get_text())
    data['Price'].append(cols[3].get_text())
    data['Date Posted'].append(cols[4].get_text())

fishData = pd.DataFrame(data)
#print(fishData)
str1 = ''.join(data['Available Quota'])
#print(type(str1))
#str1.split("\n")
str1.splitlines()
print(str1)

打印的内容:

GOM CODGOM HADDDABSGOM YT

2 个答案:

答案 0 :(得分:1)

我的猜测是,在您丢弃的表格单元格内发生了一些格式化。假设您的表格单元格中可见的四行由<br>标记分隔,当您致电get_text时,BeautifulSoup会丢弃该信息:

>>> s = 'First line <br />Second line <br />Third line'
>>> soup = BeautifulSoup(s)
>>> soup.get_text()
u'First line Second line Third line'

如上所述[{3}},您可以换出<br>代码换行,这可能会让您的生活更轻松:

>>> for br in soup.find_all("br"):
...     br.replace_with("\n")
>>> soup.get_text()
u'First line \nSecond line \nThird line'

over here生成器在这里也可能有用;它们返回最初由标签分隔的文本块:

>>> soup = BeautifulSoup(s)
>>> list(soup.stripped_strings)
[u'First line', u'Second line', u'Third line']

那么,如果你这样做会发生什么:

data['Available Quota'].extend(cols[1].stripped_strings)

希望您应该在data['Available Quota']中找到您要查找的列表:

>>> data['Available Quota']
['GOM', 'CODGOM', 'HADDDABSGOM', 'YT']

答案 1 :(得分:0)

如果您只是替换:

str1 = ''.join(data['Available Quota'])

str1 = '\n'.join(data['Available Quota'])

然后注释掉:

str1.splitlines()

然后您的print语句将打印出以下内容:

GOM
CODGOM
HADDDABSGOM
YT

我看作'\ n'.join()

输出的一个简单例子
In [41]: b
Out[41]: ['a', 'b', 'c']

In [42]: print('\n'.join(b))
a
b
c