使用BeautifulSoup和Requests提取HTML单元格数据

1 投票
1 回答
1394 浏览
提问于 2025-04-28 16:38

我有一个简单的HTML表格,是通过请求从一个网站提取出来的:

<tr align="center" class="tableRow1Font" >
<td>OPEN</td>
<td>80002</td>
<td>
<span style="font-weight:bold;">
ACCY
</span> 
<A HREF="http://bulletin.gwu.edu/search/?P=ACCY+2001" target="_blank">
<span style="font-weight:bold;">
2001
</span>
</A>
</td>

<td>10</td>
<td>Intro Financial Accounting</td>
<td>3.00</td>
<td> Ray, K</td>
<td><a href="http://virtualtour.gwu.edu/#MON" target="_blank" >MON</a> 113</td>
<td>MW<br>12:45PM - 02:00PM</td>
<td>08/25/14 - 12/06/14</td>
<td>

</td>
</tr>

我在Python中设置了这样的提取方式:

import bs4
import requests 

response = requests.get('http://my.gwu.edu/mod/pws/courses.cfm?campId=1&termId=201501&subjId=ACCY')
soup = bs4.BeautifulSoup(response.text)

我想用Beautiful Soup来提取这个表格中所有的'td'标题,并用逗号把它们分开,应该怎么做呢?

我希望提取的数据看起来是这样的:

OPEN, 80002, ACCY 2001, 10, Intro to Financial Accounting, 3.00, Ray, K, MW 12:45-02:00
暂无标签

1 个回答

1

这段话是给你一个开始的方向。不过,网页上还有很多多余的空白需要从结果中清理掉。

import bs4
import requests 

response = requests.get('http://my.gwu.edu/mod/pws/courses.cfm?campId=1&termId=201501&subjId=ACCY')
soup = bs4.BeautifulSoup(response.text)  

for tr in soup.findAll('tr')[11:]:
    stack = []
    for td in tr.findAll('td'):
        stack.append(td.text.strip())
    print(",".join(stack))

需要注意的是,这段代码忽略了页面上的前11个标签,因为它们似乎包含了不相关的信息。

你还需要找到一个更好的方法来存储数据,而不是简单地用逗号分隔。否则,课程描述中的任何逗号都可能会干扰你用来读取数据的代码。使用CSV库来处理数据可能会比手动用逗号连接数据更好。

撰写回答