【问题标题】:Extract html cell data with BeautifulSoup and Requests使用 BeautifulSoup 和 Requests 提取 html 单元格数据
【发布时间】:2014-10-21 08:53: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

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案1】:

    这将使您入门。 html 页面中仍有很多多余的空白需要从结果中清除。

    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 个 tr,因为它们似乎包含不相关的信息。

    您还需要找到一种更好的方法来保存数据,而不是简单地用逗号分隔数据 - 否则,课程描述中的任何逗号都可能会导致您尝试读回数据的任何代码。使用 CSV 库可能比手动使用逗号连接数据更好。

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多