Juypter笔记本未打印文本部分

2024-06-25 23:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以从以下网站上抓取文本https://scrapsfromtheloft.com/2020/04/25/chris-d-elia-white-male-black-comic-transcript/

我在Jypyter笔记本中使用了以下代码

 import requests
    import bs4
    import pickle
    
    from bs4 import BeautifulSoup
    
    def url_to_transcript(url):
        page = requests.get(url).text
        soup = BeautifulSoup(page, "lxml")
        text = [p.text for p in soup.find(class_="post-content").find_all('p')]
        print(url)
        return text

urls = ['https://scrapsfromtheloft.com/2020/04/25/chris-d-elia-white-male-black-comic-transcript/']

writer = ['chris']

    for i in urls:
        transcript=url_to_transcript(i)
        print(transcript)

从网站上删除文本后,我使用此代码对文件进行了pickle处理

for i, c in enumerate(writer):
    with open("transcripts/" + c + ".txt", "wb") as file:
        pickle.dump("transcripts[i]", file)

但是当我检查存储的文本文件时,没有可用的文本Iscraped,而只有这两个单词

enter image description here

我在这里完全是个新手,所以我不确定我做错了什么。我只想让Python打印我从目录中的网站提取的文本。请澄清。谢谢


Tags: textinhttps文本importcomurlfor
1条回答
网友
1楼 · 发布于 2024-06-25 23:42:42

虽然您的问题没有显示此变量是如何生成的,但假设transcripts是一个包含文本的列表列表,则可以在以下输出中看到差异:

>>> import pickle
>>> transcripts = [["first_{}".format(i), "second_{}".format(i)] for i in range(3)]
>>> transcripts
[['first_0', 'second_0'], ['first_1', 'second_1'], ['first_2', 'second_2']]
>>> i=0
>>> pickle.loads(pickle.dumps("transcripts[i]"))
'transcripts[i]'
>>> pickle.loads(pickle.dumps(transcripts[i]))
['first_0', 'second_0']
>>>

在第一个调用中,pickle只是pickle文本“transcripts[i]”,而在第二个调用中(不带引号),它将pickle位置itranscript引用的值

请注意,python中没有将单数名称转换为复数的魔力,因此需要显式声明/填充它,如下所示:

transcripts = []
for i in urls:
    transcript=url_to_transcript(i)
    print(transcript)
    transcripts.append(transcript)

如果您的代码没有显式声明transcripts,那么用引号将其括起来可以解决NameError异常,但可能不是您想要的方式

相关问题 更多 >