首页 > 解决方案 > Juypter 笔记本 - 文本部分未打印

问题描述

我可以从以下网站抓取文本。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)

从网站上抓取文本后,我使用此代码腌制文件。

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

但是当我检查存储的文本文件时,没有可用的文本 I scrape,而只有这两个词 €X transcripts[i]q 。

在此处输入图像描述

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

标签: python

解决方案


虽然您的问题没有显示此变量是如何生成的,但假设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 简单地腌制文本“transcripts[i]”,而在第二个(不带引号)中,它将腌制transcriptin position引用的值i

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

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

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


推荐阅读