python - 在 Python 中清理 HTML 解析

标签 python html parsing web-scraping beautifulsoup

下面的代码从 ( http://my.gwu.edu/mod/pws/courses.cfm?campId=1&termId=201501&subjId=ACCY ) 中抓取 tr、align='center' 标签内的 td 元素,用逗号分隔每个元素,并将结果写入文本文件:

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)
soup.prettify()

acct = open("/Users/it/Desktop/accounting.txt", "w")

for tr in soup.find_all('tr', align='center'):    
    stack = []
    for td in tr.findAll('td'):
        stack.append(td.text.strip())

    acct.write(", ".join(stack))

但是,在写入文本文件时,有大量空白行(我想消除它们),并且每行都没有以正确的元素开头。

这是我的 .txt 文件与我当前代码的样子:

我希望它看起来像这样: enter image description here

如何更改代码以消除所有空白行并让每行以“OPEN”开头,等等?

最佳答案

问题是 td.text 中有换行符。将其替换为空字符串并在末尾添加换行符。还可以替换制表符以匹配您所需的输出:

for tr in soup.find_all('tr', align='center'):
    stack = []
    for td in tr.findAll('td'):
        stack.append(td.text.replace('\n', '').replace('\t', '').strip())

    acct.write(", ".join(stack) + '\n')

产品:

STATUS, CRN, SUBJECT, SECT, COURSE, CREDIT, INSTR., BLDG/RM, DAY/TIME, FROM / TO, 
OPEN, 41552, ACCY 2001, 10, Intro Financial Accounting, 3.00, Rozenbaum, O, DUQUES 251, TR09:35AM - 10:50AM, 01/12/15 - 04/27/15, 
OPEN, 40002, ACCY 2001, 11, Intro Financial Accounting, 3.00, Rozenbaum, O, DUQUES 353, TR11:10AM - 12:25PM, 01/12/15 - 04/27/15, 
...

关于python - 在 Python 中清理 HTML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26494407/

相关文章:

python - 如何将多个图表添加到一个 excel 的不同工作表中?

python - 在python中,有没有办法自动替换缺失值?

c# - 如何获取表行中的所有 HtmlInputText 控件?

JavaScript - 仅解析 URL 的一部分,但不解析指定位置之后的所有内容

jquery - 通过Jquery获取 anchor 内容

java - 我的解析 StartTime 和 EndTime 没有正确连接到我的应用程序。帮助? ( java )

python - 如何将 help() 文档写入 Python 文件?

python - 没有括号的 "raise exception()"和 "raise exception"有区别吗?

javascript - 使用 setTimeout 刷新页面后,显示页面刷新前显示的选项卡

javascript - Eonasdan Bootstrap Datetimepicker 日历不可见