【问题标题】:Parse HTML table with Beautiful Soup in Python用 Python 中的 Beautiful Soup 解析 HTML 表格
【发布时间】:2014-12-16 05:10:30
【问题描述】:

我从http://my.gwu.edu/mod/pws/courses.cfm?campId=1&termId=201501&subjId=ACCY 中提取了这个简单的 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>

我想找到所有的 tr align="center 标签,然后去掉其中的 td 值。我希望我的代码输出看起来像这样(每个 td 值在一行上用逗号分隔):

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

我的代码:

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 align="center"'):
    stack = []
    for td in tr.findAll('td'):
    stack.append(td.text.strip())

print(",".join(stack))

这不起作用。如何仅从“tr align=center”标签中获取“td”值?

【问题讨论】:

    标签: python parsing web-scraping beautifulsoup


    【解决方案1】:

    为了从给定的 html 代码中检索表,最好使用"class=tableRow1Font" 属性。

    代码可以写成类似

    for tr in soup.findAll('tr', class_="tableRow1Font"):
          for td in tr.findAll('td'):
    

    要使用align=center 本身,您可以使用findallattr 参数

    for tr in soup.findAll('tr', attr={'class':"tableRow1Font"}):
    

    【讨论】:

      【解决方案2】:

      快速阅读docs 表明find_all 的第一个参数是标签的名称(在本例中为'tr')。额外的属性需要指定为命名参数:

      >>> soup.find_all('tr', align='center')
      [<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>]
      

      或者,您可以使用 attrs 参数传入 attrs 的字典以进行匹配:

      >>> soup.find_all('tr', attrs={'align': 'center'})
      

      当属性名称在 python 中是无效的关键字名称时,这很有用。

      【讨论】:

        猜你喜欢
        • 2011-09-27
        • 2015-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 2022-12-02
        • 1970-01-01
        相关资源
        最近更新 更多