【问题标题】:Cleaning Up HTML Parse in Python在 Python 中清理 HTML 解析
【发布时间】:2014-12-17 03:11:24
【问题描述】:

我下面的代码从 (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 文件在我当前代码中的样子:

这是我想要的样子:

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

【问题讨论】:

    标签: python html parsing web-scraping beautifulsoup


    【解决方案1】:

    问题是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, 
    ...
    

    【讨论】:

    • 天哪,你是天才@alecxe - 效果很好,非常感谢。
    猜你喜欢
    • 2011-03-05
    • 2016-07-17
    • 1970-01-01
    • 2015-01-24
    • 2012-11-25
    • 2011-06-21
    • 1970-01-01
    • 2010-10-17
    • 2019-03-02
    相关资源
    最近更新 更多