【问题标题】:TypeError: must be convertible to a buffer, not ResultSetTypeError:必须可转换为缓冲区,而不是 ResultSet
【发布时间】:2016-09-12 02:12:34
【问题描述】:

我正在尝试使用 scraperwikibs4 将 PDF 转换为文本文件。我收到了TypeError。我是 Python 的新手,非常感谢一些帮助。

这里发生错误:

File "scraper_wiki_download.py", line 53, in write_file
f.write(soup)

这是我的代码:

# Get content, regardless of whether an HTML, XML or PDF file
def send_Request(url):        
    response = http.urlopen('GET', url, preload_content=False)
    return response

# Use this to get PDF, covert to XML
def process_PDF(fileLocation):
    pdfToProcess = send_Request(fileLocation)
    pdfToObject = scraperwiki.pdftoxml(pdfToProcess.read())
    return pdfToObject

# returns a navigatibale tree, which you can iterate through
def parse_HTML_tree(contentToParse):
    soup = BeautifulSoup(contentToParse, 'lxml')
    return soup

pdf = process_PDF('http://www.sfbos.org/Modules/ShowDocument.aspx?documentid=54790')
pdfToSoup = parse_HTML_tree(pdf)
soupToArray = pdfToSoup.findAll('text')

def write_file(soup_array):
    with open('test.txt', "wb") as f:
        f.write(soup_array)

write_file(soupToArray)

【问题讨论】:

  • 了解哪一行引发了异常可能会有所帮助。

标签: python bs4 scraperwiki


【解决方案1】:

到目前为止从未使用过scraperwiki,但这会得到文本:

import scraperwiki
import requests
from bs4 import BeautifulSoup

pdf_xml = scraperwiki.pdftoxml(requests.get('http://www.sfbos.org/Modules/ShowDocument.aspx?documentid=54790').content)
print(BeautifulSoup(pdf_xml, "lxml").find_all("text"))

【讨论】:

    【解决方案2】:

    我猜soupToArray = pdfToSoup.findAll('text') 返回某种列表,但f.write() 仅适用于字符串,因此您必须对其进行迭代并以某种方式将每个元素转换为字符串。打印 soupToArray 看看它到底长什么样。

    【讨论】:

    • 看来你是对的。不幸的是,我得到了一个空列表。 pdfToSoup 似乎没有做好它的工作。
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2018-08-23
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多