下面的代码从 ( 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”开头,等等?
最佳答案
问题是 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/