python - 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 打印我从目录中的网站中提取的文本。请澄清一下。谢谢
解决方案
虽然您的问题没有显示此变量是如何生成的,但假设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]”,而在第二个(不带引号)中,它将腌制transcript
in position引用的值i
。
请注意,python 中没有将单数名称转换为复数的魔法,因此您需要显式声明/填充它,如下所示:
transcripts = []
for i in urls:
transcript=url_to_transcript(i)
print(transcript)
transcripts.append(transcript)
如果您的代码没有显式声明transcripts
,那么用引号将其括起来可以解决NameError
异常,但可能不是您想要的方式。
推荐阅读
- bots - 我如何制作欢迎命令并添加选项来设置它将发送到的频道?
- javascript - 如何使用 tampermonkey 用户脚本 javascript 延迟网站上的页面加载
- ruby-on-rails - 构建方法不保存记录
- sql-server - SQL Server Express Edition 功能和升级问题
- python - 给定数的亚当数
- c# - 微调器适配器 - Xamarin Android
- mysql - MySQL 用一个使用 COUNT(*) 的查询选择多个字段
- c# - FactoryPattern 与派生的泛型类
- python - 从嵌套字典列表中提取特定字典到临时列表
- laravel - Laravel 按日期和计数分组