当 Html 页面中缺少文本时,我需要一种方法来呈现空值并将其附加到 python 中的列表。
Html渲染的原始数据如下:
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">FB (NASDAQ) (57%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (54%)</SPAN></P>
</DIV>
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">INDUSTRY: </SPAN><SPAN CLASS="c2">NAICS511110 NEWSPAPER PUBLISHERS (61%); SIC2711 NEWSPAPERS: PUBLISHING, OR PUBLISHING &</SPAN></P>
</DIV>
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">November 7, 2016</SPAN></P>
<!-- Hide XML section from browser
</DOCFULL>
</DOC> -->
<DIV CLASS="c10"> </DIV>
<A NAME="DOC_ID_0_2"></A><!-- Hide XML section from browser
<DOC NUMBER=3>
<DOCFULL> -->
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">CS (PAR) (91%); AXJ (ASX) (91%); AXA (BIT) (91%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (57%)</SPAN></P>
</DIV>
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">COUNTRY: </SPAN><SPAN CLASS="c2">UNITED KINGDOM (88%)</SPAN><SPAN CLASS="c2"> </SPAN><SPAN CLASS="c2">United Kingdom GB</SPAN></P>
</DIV>
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">REGION: </SPAN><SPAN CLASS="c2">Europe; EU; Western Europe</SPAN></P>
</DIV>
<BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">May 12, 2016</SPAN></P>
我需要在标签之间写下文本值,它们是; TICKER
、INDUSTRY
、COUNTRY
、REGION
和 LOAD-DATE
到两个单独的列表中.
- Set 1 需要包含
TICKER
、INDUSTRY
和LOAD-DATE
。 - 第 2 组需要包含
COUNTRY
和REGION
。
如果文本中缺少 COUNTRY
,我需要将包含 Null
值的条目附加到相应列表。
例子
- 第一个Html标签列表不包含
COUNTRY
,所以应该存储NULL
- 第二个 Html 标签列表确实包含
COUNTRY
,因此应该存储United Kingdom
。
结果应该变成:
['Null', 'United Kingdom\nUnited Kingdom GB']
我尝试过的解决方法如下:
countrypattern="\<SPAN CLASS=\"c8\"\>COUNTRY: </SPAN><SPAN CLASS=\"c2\"\>(.*)\</SPAN>"
countrypatternvalues=[a.strip("*") for a in re.findall(countrypattern,response)]
if not countrypatternvalues:
countrypatternvalues.append(None)
countryvalues = re.sub(cleanr, '', str(countrypatternvalues))
请帮我解决这个问题。
最佳答案
给你:
import re
res = re.findall(r"""<SPAN CLASS="c8">([A-Z]+): *</SPAN><SPAN CLASS="c2">([^<]*)</SPAN>""",html)
class Items(object):
def __init__(self):
# list of items
self.items = []
def add_item(self, name, value):
if (not self.items) or (name in self.items[-1]):
self.items.append({})
self.items[-1][name] = value
def get_list(self, key):
return [ item[key] if key in item else None for item in self.items ]
items = Items()
for item in res:
items.add_item(item[0], item[1])
print items.get_list('COUNTRY')
如果组中没有重复的名称,这会起作用,因为重复会产生另一个组。
关于python - 如果在 HTML 页面中找不到文本,如何在 python 中打印空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973260/