BeautifulSoup - 如何在不打开标签和 <br> 标签之前提取文本?
BeautifulSoup - how to extract text without opening tag and before <br> tag?
我是 python 和 beautifulsoup 的新手,花了好几个小时试图弄明白这一点。
我想在没有 class.
的 <div>
中提取三个特定的文本摘录
我想要的第一个文本摘录位于 <a>
标记内,该标记位于 <h4>
标记内。这个我设法提取出来了。
第二个文本摘录紧跟在结束的 h4 标签 </h4>
之后,然后是 <br>
标签。
第三个文本提取紧跟在第二个文本提取之后的 <br>
标记之后,并且后面还跟有一个 <br>
标记。
这里是我使用的 html 提取物:
<div>
<h4 class="actorboxLink">
<a href="/a-decheterie-de-bagnols-2689">Decheterie de Bagnols</a>
</h4>
Route des 4 Vents<br>
63810 Bagnols<br>
</div>
我要提取:
Decheterie de Bagnols < 行得通
Route des 4 Vents < 行不通
63810 Bagnols < 不起作用
这是我目前的代码:
import urllib
from bs4 import BeautifulSoup
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")
name = soup.findAll("h4", class_="actorboxLink")
for a_tag in name:
print a_tag.text.strip()
我需要 "soup.findAll(all text after </h4>
)"
我试过使用 .next_sibling 但我无法让它工作。
有什么想法吗?谢谢
更新:
我试过这个:
for a_tag in classActorboxLink:
print a_tag.find_all_next(string=True, limit=5)
这给了我:
[u'\n', u'\r\n\t\t\t\t\t\tDecheterie\xa0de\xa0Bagnols\t\t\t\t\t', u'\n', u'\r\n\t\t\t\tRoute\xa0des\xa04\xa0Vents', u'\r\n\t\t\t\t63810 Bagnols']
这是一个开始,但我需要重新爱上所有的空格和不必要的字符。我尝试使用 .strip()
、.strings
和 .stripped_strings
但它不起作用。示例:
for a_tag in classActorboxLink.strings
for a_tag in classActorboxLink.stripped_strings
print a_tag.find_all_next(string=True, limit=5).strip()
对于所有三个,我得到:
AttributeError: 'ResultSet' object has no attribute 'strings/stripped_strings/strip'
找到 h4
元素并使用 find_next_siblings()
:
h4s = soup.find_all("h4", class_="actorboxLink")
for h4 in h4s:
for text in h4.find_next_siblings(text=True):
print(text.strip())
如果您不需要在不同变量中寻找的 3 个元素中的每一个,您可以只使用 <div>
上的 get_text()
函数将它们全部放在一个字符串中。如果还有其他 div
标签,但它们都有 类,您可以找到所有带有 class=false
的 <div>
。如果您无法隔离您感兴趣的 <div>
,那么此解决方案将不适合您。
import urllib
from bs4 import BeautifulSoup
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")
for name in soup.find_all("div", class=false)
print name.get_text().strip()
顺便说一句,这是 python 3 & bs4
我是 python 和 beautifulsoup 的新手,花了好几个小时试图弄明白这一点。
我想在没有 class.
的 <div>
中提取三个特定的文本摘录
我想要的第一个文本摘录位于 <a>
标记内,该标记位于 <h4>
标记内。这个我设法提取出来了。
第二个文本摘录紧跟在结束的 h4 标签 </h4>
之后,然后是 <br>
标签。
第三个文本提取紧跟在第二个文本提取之后的 <br>
标记之后,并且后面还跟有一个 <br>
标记。
这里是我使用的 html 提取物:
<div>
<h4 class="actorboxLink">
<a href="/a-decheterie-de-bagnols-2689">Decheterie de Bagnols</a>
</h4>
Route des 4 Vents<br>
63810 Bagnols<br>
</div>
我要提取:
Decheterie de Bagnols < 行得通
Route des 4 Vents < 行不通
63810 Bagnols < 不起作用
这是我目前的代码:
import urllib
from bs4 import BeautifulSoup
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")
name = soup.findAll("h4", class_="actorboxLink")
for a_tag in name:
print a_tag.text.strip()
我需要 "soup.findAll(all text after </h4>
)"
我试过使用 .next_sibling 但我无法让它工作。
有什么想法吗?谢谢
更新:
我试过这个:
for a_tag in classActorboxLink:
print a_tag.find_all_next(string=True, limit=5)
这给了我:
[u'\n', u'\r\n\t\t\t\t\t\tDecheterie\xa0de\xa0Bagnols\t\t\t\t\t', u'\n', u'\r\n\t\t\t\tRoute\xa0des\xa04\xa0Vents', u'\r\n\t\t\t\t63810 Bagnols']
这是一个开始,但我需要重新爱上所有的空格和不必要的字符。我尝试使用 .strip()
、.strings
和 .stripped_strings
但它不起作用。示例:
for a_tag in classActorboxLink.strings
for a_tag in classActorboxLink.stripped_strings
print a_tag.find_all_next(string=True, limit=5).strip()
对于所有三个,我得到:
AttributeError: 'ResultSet' object has no attribute 'strings/stripped_strings/strip'
找到 h4
元素并使用 find_next_siblings()
:
h4s = soup.find_all("h4", class_="actorboxLink")
for h4 in h4s:
for text in h4.find_next_siblings(text=True):
print(text.strip())
如果您不需要在不同变量中寻找的 3 个元素中的每一个,您可以只使用 <div>
上的 get_text()
函数将它们全部放在一个字符串中。如果还有其他 div
标签,但它们都有 类,您可以找到所有带有 class=false
的 <div>
。如果您无法隔离您感兴趣的 <div>
,那么此解决方案将不适合您。
import urllib
from bs4 import BeautifulSoup
data = urllib.urlopen(url).read()
soup = BeautifulSoup(data, "html.parser")
for name in soup.find_all("div", class=false)
print name.get_text().strip()
顺便说一句,这是 python 3 & bs4