【发布时间】:2019-07-17 17:39:41
【问题描述】:
我有一个 csv 文件中的网站列表,我想从中抓取完整的可见文本并保存为单独的 txt 文件。
我现在可以抓取网站,但它们带有完整的 HTML 代码。我有一个脚本(如下),它将取出该代码并为我提供可见文本,但我在最后的步骤中遇到了麻烦。
import urllib.request
import csv
import pandas as pd
from bs4 import BeautifulSoup
from bs4.element import Comment
df = pd.read_csv('~/ids.csv', sep = ',')
df.head()
def tag_visible(element):
if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
return False
if isinstance(element, Comment):
return False
return True
def text_from_html(body):
soup = BeautifulSoup(body, 'html.parser')
texts = soup.findAll(text=True)
visible_texts = filter(tag_visible, texts)
return u" ".join(t.strip() for t in visible_texts)
for i in df.message_id:
fp = urllib.request.urlretrieve('url='+str(i))
l = text_from_html(fp) #<<<---ERROR HERE
file = open(str(i)+".txt","w",encoding='utf-8')
file.close()
file.write(l)
我收到了TypeError: expected string or bytes-like object。抱歉,这可能是一个基本问题。
【问题讨论】:
-
虽然与您的问题无关,但我注意到您在
text_from_html()写入文件之前关闭了您的文件。 -
我意识到我在代码中遗漏了一个 ),感谢那些发表评论的人。但是,我仍然收到错误消息。我已经更新了上面的代码。
-
您能否提供
ids.csv中内容的示例(例如前 10 行和列名)? -
你想从哪个 URL 读取?
标签: python beautifulsoup