使用Beautifulsoup通过文本获取Href

时间:2019-04-10 10:19:28

标签: python beautifulsoup

我正在使用“ requests”和“ beautifulsoup”从具有特定文本的网页中搜索所有href链接。我已经做到了,但是如果文本换行了,beautifulsoup不会“看到”它,也不会返回该链接。

soup = BeautifulSoup(webpageAdress, "lxml")

path = soup.findAll('a', href=True, text="Something3")
print(path)

示例:

像这样,它返回Something3文本的Href:

...
<a href="page1/somethingC.aspx">Something3</a>
...

像这样,它不会返回Something3文本的Href:

...
<a href="page1/somethingC.aspx">
Something3</a>
...

区别在于Href文本(Something3)在新行中。 而且我无法更改HTML代码,因为我不是该网页的网站站长。

任何想法我该如何解决?

注意:我已经尝试使用soup.replace('\ n','').replace('\ r',''),但是我收到错误NoneType'对象不可调用。

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式查找任何包含““ Something3”的文本:

html = '''<a href="page1/somethingC.aspx">Something3</a>

<a href="page1/somethingC.aspx">
Something3</a>'''


from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(html, "lxml")

path = soup.findAll('a', href=True, text=re.compile("Something3"))

for link in path:
    print (link['href'])

答案 1 :(得分:1)

您可以将:contains伪类与bs4 4.7.1一起使用

from bs4 import BeautifulSoup as bs

html = '<a href="page1/somethingC.aspx">Something3</a>'
soup = bs(html, 'lxml')
links = [link.text for link in soup.select('a:contains(Something3)')]
print(links)

答案 2 :(得分:0)

以及没有正则表达式的解决方案:

this

输出:

path = soup.select('a')
if path[0].getText().strip() == 'Something3':
print(path)