【问题标题】:Python csv writing error - string indices must be integers, not strPython csv 写入错误 - 字符串索引必须是整数,而不是 str
【发布时间】:2017-07-12 06:34:37
【问题描述】:

我正在尝试根据搜索词从网站中提取链接并将它们写入 csv 文件。该文件已创建,但链接未写入其中。我得到错误 - 字符串索引必须是整数,而不是 str。

无法弄清楚我的错误。

from pprint import pprint
import requests
import lxml
import csv
from bs4 import BeautifulSoup

def get_url_for_search_key(search_key):
    base_url = 'http://www.marketing-interactive.com/'
    response = requests.get(base_url + '?s=' + search_key)
    soup = BeautifulSoup(response.content, "lxml")

    return [url['href'] for url in soup.findAll('a', {'rel': 'bookmark'})]

pprint(get_url_for_search_key('digital marketing'))
with open('ctp_output.csv', 'wb') as f:
    writer = csv.writer(f)
    for url in get_url_for_search_key('digital marketing'):
           writer.writerows( url['href'] )

【问题讨论】:

  • 错误出现在哪一行?请发布完整的回溯。
  • 最后一行出现错误——writer.writerows(url['href'])

标签: python csv web-scraping beautifulsoup


【解决方案1】:

您的函数返回列表,其中包含 url 作为字符串。 所以你不需要 url['href'] 因为它已经在你的函数中得到了照顾。

试试

writer.writerows( url )

代替:

writer.writerows( url['href'] )

我不知道 csv 模块是如何工作的,但这里不需要 csv

尝试:

with open('ctp_output.csv', 'w') as f:
    f.write('\n'.join(get_url_for_search_key('digital marketing')))

【讨论】:

  • 谢谢。我试过了。数据写入 csv 文件,但每个单元格只有一个字母。如何让每个单元格容纳一个链接?
  • 知道了 - TypeError: 'encoding' is an invalid keyword argument for this function.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多