Python 从a<;中提取特定页面链接;a href标记使用BeautifulSoup

Python 从a<;中提取特定页面链接;a href标记使用BeautifulSoup,python,beautifulsoup,Python,Beautifulsoup,我正在使用BeautifulSoup提取此页面中的所有链接: 我通过这种方式获得所有这些链接: # -*- coding: utf-8 -*- from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup my_url = 'http://kern.humdrum.org/search?s=t&keyword=Haydn' #opening up connecting, grabbi

我正在使用BeautifulSoup提取此页面中的所有链接:

我通过这种方式获得所有这些链接:

# -*- coding: utf-8 -*-

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'http://kern.humdrum.org/search?s=t&keyword=Haydn'

#opening up connecting, grabbing the page
uClient = uReq(my_url)

# put all the content in a variable
page_html = uClient.read()

#close the internet connection
uClient.close()

#It does my HTML parser
page_soup = soup(page_html, "html.parser")

# Grab all of the links
containers = page_soup.findAll('a', href=True)
#print(type(containers))

for container in containers:
    link = container
    #start_index = link.index('href="') 
    print(link)
    print("---")
    #print(start_index)
我的部分输出是:

注意,它返回了几个链接,但我真的希望所有的链接都带有>Someting。(例如,“>快板”和“活泼快板”等)

我很难获得以下类型的输出(图像示例): “快板——”


换句话说,在这一点上,我有一堆锚定标记(+-1000)。从所有这些标签中,有一堆只是“垃圾”和+-350个我想提取的标签。所有这些标签看起来几乎相同,但唯一的区别是我需要的标签末尾有“>某人的名字”。我只想排除所有锚标签与此特征的链接

假设您已经有了需要搜索的子字符串列表,您可以执行以下操作:

for link in containers:
    text = link.get_text().lower()
    if any(text.endswith(substr) for substr in substring_list):
        print(link)
        print('---')

假设您已经有了需要搜索的子字符串列表,您可以执行以下操作:

for link in containers:
    text = link.get_text().lower()
    if any(text.endswith(substr) for substr in substring_list):
        print(link)
        print('---')

从我在图像中看到的信息中,具有信息的具有
href
属性,包含
format=“info”
,因此您可以使用
[href*=format=“info”]
的属性=值CSS选择器,其中
*
表示包含;属性值包含第一个等于后的子字符串

import bs4 , requests

res = requests.get("http://kern.humdrum.org/search?s=t&keyword=Haydn")
soup = bs4.BeautifulSoup(res.text,"html.parser")
for link in soup.select('[href*=format="info"]'):
    print(link.getText(), link['href'])

从我在图像中看到的信息中,具有信息的具有
href
属性,包含
format=“info”
,因此您可以使用
[href*=format=“info”]
的属性=值CSS选择器,其中
*
表示包含;属性值包含第一个等于后的子字符串

import bs4 , requests

res = requests.get("http://kern.humdrum.org/search?s=t&keyword=Haydn")
soup = bs4.BeautifulSoup(res.text,"html.parser")
for link in soup.select('[href*=format="info"]'):
    print(link.getText(), link['href'])

最好且最简单的方法是在打印链接时使用文本属性。这样地:
打印链接。text

打印链接时使用text属性是最好、最简单的方法。这样地:
print link.text

是否要提取具有指定锚文本的链接

for container in containers:
    link = container
    # match exact
    #if 'Allegro di molto' == link.text:
    if 'Allegro' in link.text: # contain
        print(link)
        print("---")

是否要提取具有指定锚文本的链接

for container in containers:
    link = container
    # match exact
    #if 'Allegro di molto' == link.text:
    if 'Allegro' in link.text: # contain
        print(link)
        print("---")

您需要使用beautifulsoup吗?如果使用允许xpath表达式的html解析器,这会容易得多。看@bunji,我不需要用它。我刚刚看到网上一定有人用beautifulsoup,这就是我为什么要这么做的原因。我会检查其他方法,谢谢。你需要使用beautifulsoup吗?如果使用允许xpath表达式的html解析器,这会容易得多。看@bunji,我不需要用它。我刚刚看到网上一定有人用beautifulsoup,这就是我为什么要这么做的原因。我会检查其他方法,谢谢。这不符合我的需要。我抓取页面的全部目的就是尝试自动抓取所有链接。如果我过滤“allegro”,这将只是一个链接。不知道你想做什么。那个圈给我印了一大堆锚标签。你能提供更多关于你的问题的背景吗?当然。在这一点上,我有一堆锚定标记(+-1000)。从所有这些标签中,有一堆只是“垃圾”和+-350个我想提取的标签。所有这些标签看起来几乎相同,但唯一的区别是我需要的标签末尾有“>某人的名字”。我只想排除所有具有此特征的锚定标记的链接。换句话说,您需要找到文本以某个子字符串结尾的所有标记?或者您需要搜索多个不同的子字符串?我需要搜索多个子字符串。例如,它可以是“快板”或“快板”或。。。识别此标签的唯一方法是在标签的末尾,我会有类似“>某人的姓名”(即“>Presto”)的内容,但这不会满足我的需要。我抓取页面的全部目的就是尝试自动抓取所有链接。如果我过滤“allegro”,这将只是一个链接。不知道你想做什么。那个圈给我印了一大堆锚标签。你能提供更多关于你的问题的背景吗?当然。在这一点上,我有一堆锚定标记(+-1000)。从所有这些标签中,有一堆只是“垃圾”和+-350个我想提取的标签。所有这些标签看起来几乎相同,但唯一的区别是我需要的标签末尾有“>某人的名字”。我只想排除所有具有此特征的锚定标记的链接。换句话说,您需要找到文本以某个子字符串结尾的所有标记?或者您需要搜索多个不同的子字符串?我需要搜索多个子字符串。例如,它可以是“快板”或“快板”或。。。识别此标签的唯一方法是在标签的末尾,我会有类似“>某人的姓名”(即“>Presto”)的内容