问题有点令人困惑,但我希望下面的例子可以澄清事情。
我尝试从页面中的一个(且仅)<div>
标记中抓取数据。
问题1:该div中的所有数据全部放在一起,仅由<h3>
标记分隔。
问题2:<p>
代码后<h3>
代码变数可变,h3
代码可以是Title1或Title2。
如何解析div元素并将所有数据拆分为某种类型的数组/字典结构,该结构仅包含h3
个标记和所有p
标记,直到下一个h3
标记
图片说明了一切。
到目前为止我的代码(可以处理和删除数据):
links = soup.find('div', class_='DIV I WANT')
for p in links.find_all(['p', 'h3']):
print p.text.strip()
编辑:
添加了完整的HTML。是的,它写得完全一样。数据显然略有变化:
<div class="table">
<p>
List of actors.
</p>
<p>
date 25.09.2017
</p>
<h3>
Actor
</h3>
<p>
Office
<br>
Address 1 8, 100 City 15
<br>
Address 2 250, 200 City 15
</p>
<p>
08h00-12h30 13h15-16h45<br>08h00-12h30 13h00-15h00
</p>
<p>
<a href="http://www.example.com" target="_blank" title="Actors" class="fonticon">www.example.com<span data-icon="l"></span></a>
</p>
<p>
info@example.com
<br>
</p>
<p>
012/123 45 67
<br>
</p>
<p>
telefax 123/123 45 67
</p>
<h3>
Actress
</h3>
<p>
Personal address
<br>
Address 7, 20 City 2
<br>
Address 5, 30 City 2
</p>
<p>
8h15-12h30 13h30-16h30(lu-ma-je)16h45 me<br>8h15-12h30
</p>
<p>
<a href="http://www.example.com" target="_blank" title="Actress" class="fonticon">www.example.com<span data-icon="l"></span></a>
</p>
<p>
info@example.com
<br>
</p>
<p>
023/999 99 99
<br>
023/999 99 88 phone1
<br>
023/999 99 77 phone2
<br>
</p>
<p>
telefax 001/333 44 55<br>telefax 001/000 00 10 ppts
</p>
<h3>
Actor
</h3>
答案 0 :(得分:1)
使用select选择所有h3标记,然后.next_siblings进行迭代并添加每个元素的文本,直到找到下一个h3标记
data = []
titles = soup.select('.table h3')
for title in titles:
if('Title1' or 'Title2' in title:
item = {"title":title.get_text(),"description":""}
for sibling in title.next_siblings:
#stop when you reach the next tag
if(sibling.name == "h3"):
break;
try:
item['description'] += sibling.get_text()
except:
pass
data.append(item)
print(data)