Python 如何在一些锚定标记之间提取文本?

Python 如何在一些锚定标记之间提取文本?,python,anchor,beautifulsoup,scraper,Python,Anchor,Beautifulsoup,Scraper,我需要从HTML页面中提取艺术家的名字。以下是该页面的一个片段: 我在哪里搞砸了?你可以试试这个: In [1]: from bs4 import BeautifulSoup In [2]: s = # Your string here... In [3]: soup = BeautifulSoup(s) In [4]: for anchor in soup.find_all('a'): ...: print anchor.text ...: ...: her

我需要从HTML页面中提取艺术家的名字。以下是该页面的一个片段:

我在哪里搞砸了?

你可以试试这个:

In [1]: from bs4 import BeautifulSoup

In [2]: s = # Your string here...

In [3]: soup = BeautifulSoup(s)

In [4]: for anchor in soup.find_all('a'):
   ...:     print anchor.text
   ...:
   ...:

here lies the text i need

在这里,
find\u all
方法返回一个包含所有匹配锚定标记的列表,之后我们可以打印
文本
属性以获取标记之间的值。

正则表达式是您的朋友。作为RocketDonkey答案的另一种选择,RocketDonkey正确地使用了BeautifulSoup;您可以使用如下正则表达式通过soup('a')进行解析

>([a-zA-Z]*|[0-9]|(\w\s*)*)</a>
>([a-zA-Z]*|[0-9]|(\w\s*)*)
您可以利用该方法直接获取锚定标记之间的文本

用于汤中的链接。选择('td.subjectCell a'):
打印link.text

它是
td
元素中具有subjectCell类的
a
元素。

soup.findAll
link.attrs
可用于轻松读取
href
属性

工作代码:

soup = BeautifulSoup(html)

for link in soup.findAll('a'):
    print (link.attrs['href'])
/music/example
/music/example-artist
输出:

soup = BeautifulSoup(html)

for link in soup.findAll('a'):
    print (link.attrs['href'])
/music/example
/music/example-artist

你正在打印
html
而不是循环中的
link
。哦,是的,我打印html是为了在这里发布代码,但忘了更改。但仍然不是我需要的解决方案,它打印整个锚定标签。我已经在这里回答了您的问题,它可能会起作用
str(link)
link。prettify()
是您想要的吗?这不是您最初问muchacho的问题。你的问题应该更具描述性,我们无法读懂你的心思。用正则表达式解析html就像与骑士的盔甲共舞。
find\u all
方法名称不是有点像python吗?而且,它并不完全返回一个迭代器,而是一个列表。@CristianCiupitu是的,在我的脑海中仍然有旧的BeautifulSoup方法。至于迭代器的评论,我归咎于我已经过了睡觉时间:)@muchacho没有复制并粘贴[1]:中的
,或者
。这些是他的ipython终端的线路号。它不是有效的python。可以从一个.txt打开多个URL,然后一次刮取网页内容吗?@muchacho是的,您可以将其包装在一个
for
循环中,循环遍历URL,也许可以将匹配项存储在一个新列表中。我建议您阅读
for
循环和
open
——这应该会让您开始:)感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
/music/example
/music/example-artist