【问题标题】:__new__() missing 1 required positional argument depending of url scraped__new__() 缺少 1 个必需的位置参数,具体取决于抓取的 url
【发布时间】:2018-08-17 12:30:44
【问题描述】:

我有一个奇怪的错误,我会尽量简化我的问题。 我有一个简单的函数,它用漂亮的汤报废一个 url 并返回一个列表。 然后,我腌制文件中的列表,所以我 setrecursionlimit(10000) 以避免 RecursionError。直到那里,一切都很好。

但是当我尝试解开我的列表时,我遇到了这个错误:

Traceback (most recent call last):
  File ".\scrap_index.py", line 86, in <module>
    data_file = pickle.load(data)
TypeError: __new__() missing 1 required positional argument: 'name'

还有我的功能:

import urllib.request
from bs4 import BeautifulSoup

def scrap_function(url):
    page = urllib.request.urlopen(url)
    soup = BeautifulSoup(page, "html5lib")   

    return [soup]

为了测试,我尝试了不同的网址。 有了这个网址,一切都很好:

url_ok = 'https://www.boursorama.com/bourse/'

但是有了那个,我有 TypeError:

url_not_ok = 'https://www.boursorama.com/bourse/actions'

以及测试代码:

import pickle
import sys

sys.setrecursionlimit(10000)

scrap_list = scrap_function(url_not_ok)

with open('test_saving.pkl', 'wb') as data:
    pickle.dump(scrap_list, data, protocol=2)

with open('test_saving.pkl', 'rb') as data:
    data_file = pickle.load(data)

print(data_file)

【问题讨论】:

    标签: python beautifulsoup pickle


    【解决方案1】:

    This 状态

    如果某些类对象在 new 构造函数中有额外的参数 , pickle 序列化失败。

    这可能会导致beautifulsoap中here的问题:

    class NavigableString(unicode, PageElement):
        def __new__(cls, value):
    

    This answer 声明相同。

    作为一种解决方案,不要存储整个对象,而可能只存储提到的页面源代码here

    【讨论】:

    • 谢谢,我会试试的。但如果是这样,为什么它与一些网址一起工作?
    • 我在您的链接中找到了解决方案!这是一个编码问题。只需要return [str(soup)] 就没有NavigableString。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2020-10-03
    • 2020-02-15
    相关资源
    最近更新 更多