BS4 如何在不使用 .text 的情况下获取文本?
BS4 How to get text without using .text?
这是来自网站的源代码布局:
<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 ')
您可以找到 br
分隔符标记并在其周围获取 siblings:
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()
将其替换为 space:
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'
尝试:
soup.find('div', {'class':'address'}).get_text(separator=u"<br/>").split(u'<br/>')
separator 关键字定义了连接文本的内部 HTML。
http://omz-software.com/pythonista/docs/ios/beautifulsoup_ref.html
尝试:
for link_to_text in links:
Print link_to_text.get_text()
这是来自网站的源代码布局:
<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 ')
您可以找到 br
分隔符标记并在其周围获取 siblings:
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()
将其替换为 space:
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'
尝试:
soup.find('div', {'class':'address'}).get_text(separator=u"<br/>").split(u'<br/>')
separator 关键字定义了连接文本的内部 HTML。
http://omz-software.com/pythonista/docs/ios/beautifulsoup_ref.html
尝试:
for link_to_text in links:
Print link_to_text.get_text()