如何在抓取网站时使用 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,Machaela,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)
我是这个领域的新手。这是我需要爬取的网站“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,Machaela,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)