【问题标题】:Export scraped tables to CSV将抓取的表导出到 CSV
【发布时间】:2014-02-08 09:39:10
【问题描述】:

我已经使用 BeautifulSoup 将这些表刮到了 Python 中的一个表中。代码如下:

import urllib2
from bs4 import BeautifulSoup
for i in range(0,39):
    first=urllib2.urlopen("http://www.admision.unmsm.edu.pe/res20130914/A/011/"+str(i)+".html").read()
    soup=BeautifulSoup(first)
    for tr in soup.find_all('tr')[2:]:
      tds = tr.find_all('td')
      print tds[0].text, tds[1].text, tds[2].text, tds[3].text

结果是这样的:

494560 ABAD SAAVEDRA, GERSON HORACIO 011 1116.8750
455314 ABAD VALVERDE, MARIA ISABEL 011 1482.7500
491005 ABREGU HUAMAN, MERCEDES LILIANA 011 503.4000
457929 ACOSTA ABAD, ALEJANDRO FRANCISCO 011 413.0500

那么,我怎样才能将此表导出为 CSV?

【问题讨论】:

    标签: python csv web-scraping scrape


    【解决方案1】:

    使用csv模块:

    import csv
    import urllib2
    from bs4 import BeautifulSoup
    
    with open('listing.csv', 'wb') as f:
        writer = csv.writer(f)
        for i in range(39):
            url = "http://www.admision.unmsm.edu.pe/res20130914/A/011/{}.html".format(i)
            u = urllib2.urlopen(url)
            try:
                html = u.read()
            finally:
                u.close()
            soup=BeautifulSoup(html)
            for tr in soup.find_all('tr')[2:]:
                tds = tr.find_all('td')
                row = [elem.text.encode('utf-8') for elem in tds[:4]]
                writer.writerow(row)
    

    【讨论】:

    • 一个小问题:一次对 UTF-8 处理所有内容而不是重复自己可能会更干净一些。也许[elem.text.encode('utf-8') for elem in tds[:4]]
    • @abarnert,谢谢你的建议。我根据您的评论更新代码。
    • @CreamStat,如果你点击答案中的链接,在文档中,有很多例子。
    • @CreamStat:模块文档看起来很吓人,但是如果阅读概述,然后一直跳到Examples,您只需要使用中间部分作为参考,当您已经知道您要查找的内容(例如 quoting 参数的真正含义)。
    • @CreamStat, UTF-8 是字符编码之一。您可以使用其他编码。我选择它是因为网页也使用了它。您可以通过检查 HTML 中的 HTTP 标头/<meta> 标签来检查网页编码。
    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多