我有一个要求,我需要在HTML标记之间提取文本。我使用BeautifulSoup来提取数据并将文本存储到变量中以供进一步处理。后来我发现,我需要提取的文本有两个不同的标签。但请注意,我需要提取文本并存储到同一个变量中。我提供了我之前的代码和示例HTML文本信息。请帮助我如何得到我的最终结果,即预期的输出。
示例HTML文本:
<DIV CLASS="c0"><P CLASS="c1"><SPAN CLASS="c2">1 of 80 DOCUMENTS</SPAN></P>
<DIV CLASS="c0"><BR><P CLASS="c1"><SPAN CLASS="c2">Financial Times (London, England)</SPAN></P>
<DIV CLASS="c0"><BR><P CLASS="c1"><SPAN CLASS="c2">Copyright 2015 The Financial Times Ltd.<BR>All Rights Reserved<BR>Please do not cut and paste FT articles and redistribute by email or post to the web.</SPAN></P>
<DIV CLASS="c0"><P CLASS="c1"><SPAN CLASS="c2">80 of 80 DOCUMENTS</SPAN></P>
</DIV>
<BR><DIV CLASS="c3"><P CLASS="c1"><SPAN CLASS="c2">Financial Times (London,England)</SPAN></P>
</DIV>
<DIV CLASS="c3"><P CLASS="c1"><SPAN CLASS="c2">Copyright 1990 The Financial Times Limited</SPAN></P>
</DIV>
从上面的HTML文本中,我需要将文档(80个文档中的1个,80个文档中的80个)存储到单个变量中。类似于其他文本,它遵循类似的方法。我为div.c0写了代码
soup = BeautifulSoup(response, 'html.parser')
docpublicationcpyright = soup.select('div.c0')
list1 = [b.text.strip() for b in docpublicationcpyright]
doccountvalues = list1[0:len(list1):3]
publicationvalues = list1[1:len(list1):3]
copyrightvalues = list1[2:len(list1):3]
documentcount = doccountvalues
publicationpaper = publicationvalues
非常感谢任何帮助。
答案 0 :(得分:1)
给定示例HTML没有正确结构化。例如:第一个DIV元素缺少结束标记。无论如何,这种类型的HTML也使用正则表达式,你可以抓取所需的数据。
我编写了一个示例代码,仅考虑问题&amp;能够提取所有三个必填字段
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
if (isItemSelected.equals("true")){
listviewTitles.setBackgroundColor(0xAAAAFFFF);
}
else if (isItemSelected.equals("false")){
// Default color
}
}else{
if (isItemSelected.equals("true")){
listviewTitles.setBackgroundColor(0xAAAAFFFF);
}
else if (isItemSelected.equals("false")){
// Default color
}
}
输出如下所示
soup = BeautifulSoup(response, 'html.parser')
documentElements = soup.find_all('span', text=re.compile(r'of [0-9]+ DOCUMENTS'))
documentCountList = []
publicationPaperList = []
documentPublicationCopyrightList = []
for elem in documentElements:
documentCountList.append(elem.get_text().strip())
if elem.parent.find_next_sibling('div'):
publicationPaperList.append(elem.parent.find_next_sibling('div').find('span').get_text().strip())
documentPublicationCopyrightList.append(elem.parent.find_next_sibling('div').find_all('span')[1].get_text())
else:
publicationPaperList.append(elem.parent.parent.find_next('div').get_text().strip())
documentPublicationCopyrightList.append(elem.parent.parent.find_next('div').find_next('div').get_text().strip())
print(documentCountList)
print(publicationPaperList)
print(documentPublicationCopyrightList)