Python 从a<;中提取特定页面链接;a href标记使用BeautifulSoup
我正在使用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
# -*- 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”)的内容