如何在抓取网站时使用 Beautfulsoup 获取两个标签之间的 'name'?

How to get the 'name' between two tags using Beautfulsoup while crawling a website?

我是这个领域的新手。这是我需要爬取的网站“http://py4e-data.dr-chuck.net/comments_1430669.html”这是它的源代码“view-source:http://py4e-data.dr-chuck.net/comments_1430669.html" 这是一个简单的练习网站。HTML 代码类似于:

<html>
<head>
<title>Welcome to the comments assignment from www.py4e.com</title>
</head>
<body>
<h1>This file contains the actual data for your assignment - good luck!</h1>

<table border="2">
<tr>
<td>Name</td><td>Comments</td>
</tr>
<tr><td>Melodie</td><td><span class="comments">100</span></td></tr>
<tr><td>Machaela</td><td><span class="comments">100</span></td></tr>
<tr><td>Rhoan</td><td><span class="comments">99</span></td></tr>

我需要得到两个 (Melodie,Ma​​chaela,Rhoan) 之间的名字 下面是我的代码:

html=urllib.request.urlopen('http://py4e-data.dr-chuck.net/comments_1430669.html').read()

soup=BeautifulSoup(html,'html.parser')

    for line in soup.find_all('tr'):
        print(line) #Result:
    
#===============================================================================
# <tr>
# <td>Name</td><td>Comments</td>
# </tr>
# <tr><td>Melodie</td><td><span class="comments">100</span></td></tr>
# <tr><td>Machaela</td><td><span class="comments">100</span></td></tr>
# <tr><td>Rhoan</td><td><span class="comments">99</span></td></tr>
# ..........
#===============================================================================

棘手的部分是行尾也有 "<td><tr>",所以 Python 就可以了。我正在考虑正则表达式解决方案(在 2 个子字符串之间查找字符串),但我想以 Beautifulsoup 方式进行。

只需 select <tr> 中的第一个 <td> 获取其文本:

for e in soup.find_all('tr'):
    print(e.td.text)

为了避免在切片 ResultSet 上操作 header“名称”:

for e in soup.find_all('tr')[1:]:
    print(e.td.text)

例子

html=urllib.request.urlopen('http://py4e-data.dr-chuck.net/comments_1430669.html').read()

soup=BeautifulSoup(html,'html.parser')

for e in soup.find_all('tr'):
    print(e.td.text)