I am using BeautifulSoup to extract all the links from this page: http://kern.humdrum.org/search?s=t&keyword=Haydn
中提取特定的页面链接
我通过这种方式获取所有这些链接:
# -*- 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链接。 (例如,“> Allegro”和“ Allegro vivace”等)。
我很难获得以下类型的输出(图像示例): “快板-http://kern.ccarh.org/cgi-bin/ksdata?location=users/craig/classical/beethoven/piano/sonata&file=sonata01-1.krn&format=info”
换句话说,在这一点上,我有一堆锚标记(+-1000)。从所有这些标签中,有一堆只是“垃圾”,我想提取+-350个标签。所有这些标签看起来几乎相同,但是唯一的区别是我需要的标签的末尾带有“>某人的名字<\ a>”。我只想吸引所有具有此特征的锚标签的链接。
答案 0 :(得分:3)
从图像中我可以看到,带有信息的信息具有包含href
的{{1}}属性,因此您可以使用{= {1}}的attribute = value CSS选择器,其中{{ 1}}表示包含;属性值包含第一个等于之后的子字符串。
format="info"
答案 1 :(得分:1)
最好和最简单的方法是在打印链接时使用text属性。像这样 :
print link.text
答案 2 :(得分:0)
假设您已经有了需要搜索的子字符串列表,则可以执行以下操作:
for link in containers:
text = link.get_text().lower()
if any(text.endswith(substr) for substr in substring_list):
print(link)
print('---')
答案 3 :(得分:0)
您要提取具有指定锚文本的链接吗?
for container in containers:
link = container
# match exact
#if 'Allegro di molto' == link.text:
if 'Allegro' in link.text: # contain
print(link)
print("---")