1

这是来自网站的源代码布局:

<div class="address">
    <a href="https://website.ca/classifieds/59-barclay-street/">
        59 Some Street<br />City, Zone 1
    </a>
</div>

我想获取 Google 地理编码的街道号码、路线和城市。如果我这样做

>>>article.find('div', {'class': 'address'}).text
'59 Some StreetCity, Zone 1'

它带走了<br />,我无法将路线从城市中分离出来。如果我这样做了,str().replace('<br />',', ')那么我必须以某种方式将它再次转换回之前的任何类型,以便我可以.text获取 之间的实际文本<a href>,这是低效的。我想.text使用用于获取实际文本的功能,而不是删除<br>内容的功能。我找不到在我的环境中调用的文件BeautifulSoup.py,所以我正在查看 GitHub 上的 BeautifulSoup 源代码,但我在其中找不到def text,我不知道在哪里可以查看。

更新:

articles = page_soup.find('h2', text='Ads').find_next_siblings('article')
for article in articles:
    link = article.find('a')
    br = link.find('br')
    ad_address = br.previous_sibling.strip() + ', ' + br.next_sibling.strip().partition(', Zone ')[0]
    #ad_address = link.br.replace_with(', ').get_text().strip().partition(', Zone ')
4

3 回答 3

3

您可以找到br分隔符标记并获取其周围的兄弟姐妹:

In [4]: br = soup.select_one("div.address > a > br")

In [5]: br.previous_sibling.strip()
Out[5]: u'59 Some Street'

In [6]: br.next_sibling.strip()
Out[6]: u'City, Zone 1'

您还可以br使用以下方法定位元素并将其替换为空格replace_with()

In [4]: a = soup.select_one("div.address > a")
In [5]: a.br.replace_with(" ")

In [6]: a.get_text().strip()
Out[6]: u'59 Some Street City, Zone 1'

a或者,您可以连接标签内的所有文本节点:

In [7]: a = soup.select_one("div.address > a")
In [8]: " ".join(a.find_all(text=True)).strip()
Out[8]: u'59 Some Street City, Zone 1'
于 2015-10-27T03:57:36.197 回答
1

尝试:

soup.find('div', {'class':'address'}).get_text(separator=u"<br/>").split(u'<br/>')

分隔符关键字定义连接文本的内部 HTML。

http://omz-software.com/pythonista/docs/ios/beautifulsoup_ref.html

于 2015-10-27T04:02:40.703 回答
0

尝试:

for link_to_text in links:
   Print link_to_text.get_text()
于 2017-09-08T07:31:36.973 回答