我正在使用python +漂亮汤来解析html。我的问题是,我有一个可变数量的文本项目。在这种情况下,例如,我想提取‘文本1',’文本2',.‘'Text 4’在其他网页中,可能只有‘文本1’或可能只有两个,等等,所以会发生变化。如果'Text x's包含在一个标签中,它将使我的生活变得更容易。但它们不是。我可以使用下一个和以前的(或者nextSibling和previousSibling)访问它们,但我不知道如何将它们全部处理。想法是(假设我遇到的最大数字是4个)将'Text 1‘写到一个文件中,然后一直到'Text 4’为止。在这种情况下。在只有“Text 1”的情况下,我会将“Text 1”写到文件中,然后只有2-4的空白。对我该做什么有什么建议吗?
<div id="DIVID" style="display: block; margin-left: 1em;">
<b>Header 1</b>
<br/>
Text 1
<br/>
Text 2
<br/>
Text 3
<br/>
Text 4
<br/>
<b>Header 2</b>
</div>当我在做的时候,我有一个与此无关的问题。假设我有一个网站,有一个可变数量的链接,所有链接到html完全一样,我有上面。这不是这个应用程序,但想想craigslist -在一个中央页面上有许多链接。为了进行解析,我需要能够访问这些页面中的每一个。做这件事的好方法是什么?
谢谢!
额外:下一个网页可能如下所示:
<div id="DIVID2" style="display: block; margin-left: 1em;">
<b>Header 1</b>
<br/>
Different Text 1
<br/>
Different Text 2
<br/>
<b>Header 2</b>
</div>注意不同之处:
注意关键的相似性:
发布于 2013-09-26 21:27:18
你可以尝试这样的方法:
>>> test ="""<b>Header 1</b>
<br/>
Text 1
<br/>
Text 2
<br/>
Text 3
<br/>
Text 4
<br/>
<b>Header 2</b>"""
>>> soup = BeautifulSoup(test)
>>> test = soup.find('b')
>>> desired_text = [x.strip() for x in str(test.parent).split('<br />')]
['<b>Header 1</b>', 'Text 1', 'Text 2', 'Text 3', 'Text 4', '<b>Header 2</b>']现在你只需要按你的“头”块分开,我认为这是可行的,我相信这可能会让你朝着正确的方向开始。
至于你的另一个问题,你需要组装一个链接列表,然后迭代它们,分别打开每个链接,并处理你要做的事情。这是一个更广泛的问题,所以你应该尝试一些东西,回来完善你所拥有的,并在你需要帮助的时候问一个新的问题。
对最后一行代码的解释:
[x.strip() for x in str(test.parent).split('<br />')]这需要我上面分配的"test“节点,并获取父节点。通过转换成字符串,我可以在<br>标记上“拆分”,从而使这些标记消失,并分离我们想要分离的所有文本。这将创建一个列表,其中每个列表项都有我们想要的文本和一些‘\n’。
最后,最让人困惑的可能是列表理解语法,如下所示:
some_list = [item for item in some_iterable]这只会产生一个从"some_iterable“中摘取的”item“列表。在我的列表理解中,我正在遍历列表,获取列表中的每一项,并简单地去掉换行符( x.strip()部分)。顺便说一句,有很多方法可以做到这一点。
发布于 2013-09-27 07:22:06
这里有一个不同的解决方案。nextSibling可以获取部分结构化文档,这些文档都是在指定的标记后面。
from BeautifulSoup import BeautifulSoup
text="""
<b>Header 1</b>
<br/>
Text 1
<br/>
Text 2
<br/>
Text 3
<br/>
Text 4
<br/>
<b>Header 2</b>
"""
soup = BeautifulSoup(text)
for br in soup.findAll('br'):
following = br.nextSibling
print following.strip()https://stackoverflow.com/questions/19037928
复制相似问题