读取保存在文本文件中的源页面并提取文本

时间:2015-10-14 05:57:35

标签: python beautifulsoup

我有多个文本文件,用于存储网站的源页面。所以每个文本文件都是一个源页面。

我需要使用以下代码从存储在文本文件中的div类中提取文本:

from bs4 import BeautifulSoup
soup = BeautifulSoup(open("zing.internet.accelerator.plus.txt"))
txt = soup.find('div' , attrs = { 'class' : 'id-app-orig-desc' }).text
print txt

我检查了我的汤对象的类型,以确保在查找div类时不使用字符串查找方法。 汤对象的类型

print type(soup)
<class 'bs4.BeautifulSoup'>

我已经从the previous post中选择了一个,并在beautifulsoup语句中写了一个开放语句。

错误:

Traceback (most recent call last):
  File "html_desc_cleaning.py", line 13, in <module>
    txt2 = soup.find('div' , attrs = { 'class' : 'id-app-orig-desc' }).text
AttributeError: 'NoneType' object has no attribute 'text'

来自页面的来源:

enter image description here

2 个答案:

答案 0 :(得分:2)

尝试替换此:

soup = BeautifulSoup(open("zing.internet.accelerator.plus.txt"))

用这个:

soup = BeautifulSoup(open("zing.internet.accelerator.plus.txt").read())

顺便说一下,关闭文件后读取它是个好主意。您可以像这样使用with

with open("zing.internet.accelerator.plus.txt") as f:
    soup = BeautifulSoup(f.read())

with会自动关闭该文件。

以下是您需要.read()功能的原因示例:

>>> a = open('test.txt')
>>> type(a)
<class '_io.TextIOWrapper'>

>>> print(a)
<_io.TextIOWrapper name='test.txt' mode='r' encoding='UTF-8'>

>>> b = a.read()
>>> type(b)
<class 'str'>

>>> print(b)
Hey there.

>>> print(open('test.txt'))
<_io.TextIOWrapper name='test.txt' mode='r' encoding='UTF-8'>

>>> print(open('test.txt').read())
Hey there.

答案 1 :(得分:0)

我已经解决了这个问题。

在我的案例中,beautifulsoup的默认解析器是'lxml',它无法读取完整的源页面。

将解析器更改为'html.parser'对我有用。

f = open("zing.internet.accelerator.plus.txt")
soup = f.read()
bs = BeautifulSoup(soup,"html.parser")
print bs.find('div',{'class' : 'id-app-orig-desc'}).text