【问题标题】:how to add lists to a dictionary then output to .csv如何将列表添加到字典然后输出到 .csv
【发布时间】:2013-07-03 18:00:33
【问题描述】:

我尝试通过搜索标签遍历 html 中的表,然后将找到的值更新到字典,然后将这些值写入 csv。输出当前适用于 url 和标题,但名称输出将为空白或显示“无”。但是,如果我打印 blog["name'] 的输出,它会正确提取我想要的信息。我怀疑这是一个缩进错误,但我不知道在哪里排列。我试过移动东西但似乎没有任何方法可以让名称分配在该循环内工作。

import os
from bs4 import BeautifulSoup
import my_csv_writer

def td_finder(tr, searchLabel):
    value = ""
    index = tr.text.find(searchLabel)
    if index>-1:
        tds = tr.findAll('td')
        if len(tds)>1:
            value = tds[1].text
return value

def main():
    topdir = 'some_directory'
    writer = my_csv_writer.CsvWriter("output.csv")
    writer.writeLine(["url", "headline", "name"])

    """Main Function"""
    blog = []

    for root, dirs, files in os.walk(topdir):
        for f in files:
        url = os.path.join(root, f)
        url = os.path.dirname(url).split('some_file')[1]

        if f.lower().endswith((".html")):
            file_new = open(os.path.join(root, f), "r").read()
            soup = BeautifulSoup(file_new)
            blog = {}

            #Blog Title                    
            blog["title"] = soup.find('title').text

            for table in soup.findAll("table"):
                for tr in table.findAll("tr"):
                    #name
                    blog["name"] = td_finder(tr, "name:")

        seq = [url, unicode(blog["title"]), unicode(blog.get("name"))]

        writer.writeLine(seq)

#return ""
if __name__ == '__main__':
    main()
    print "Finished main"

【问题讨论】:

  • blog["name"] = td_finder(tr,name:' 行发生了什么
  • 对不起,错字 - 我更正了。它只是 tr_finder 函数中 searchLabel 的一般持有者。
  • 你的main 函数没有正确缩进(def main(): 之后应该有一个缩进)。
  • 堆栈输入代码很痛苦。缩进已更正。这就是我 ide 中的样子。
  • 堆栈提示是使用空格作为缩进,然后在代码中添加另一个缩进并粘贴!

标签: python html csv dictionary beautifulsoup


【解决方案1】:

您正在将 unicode 字符串写入 csv 文件,根据官方文档“The csv module doesn't directly support reading and writing Unicode...”。

它确实提供了替代类来启用不同的编码via UnicodeWriter。以下来自 Boud on SO 的 answer 强调了在 CSV 文件中设置所需编码的必要性。

【讨论】:

  • 我已经尝试过打印语句。这个“所以因为密钥似乎不存在,所以返回 None。”我相当肯定是我的问题。我不知道为什么在 td_finder() 正确找到我想要的 html 标记和信息后,当我编写序列时它已经消失了。
  • “名称”文本是否需要使用 unicode?如果将其转换为 ASCII 会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 2014-03-13
  • 1970-01-01
相关资源
最近更新 更多