0

这是我到目前为止的代码:

import urllib
from bs4 import BeautifulSoup

lis = []
webpage = urllib.urlopen('http://facts.randomhistory.com/interesting-facts-about-     cats.html')
soup = BeautifulSoup(webpage)
for ul in soup:
    for li in soup.findAll('li'):
        lis.append(li)
    for li in lis:
        print li.text.encode("utf-8")

我只是想从开始和结束的“li”标签之间获取猫的事实,并以一种看起来不混乱的方式输出它们。目前,此代码的输出将所有事实重复 4 次左右,并且单词“can't”出现为“can’t”。

我会很感激任何帮助。

4

2 回答 2

1

您不需要外循环 ( for ul in soup)。如果您删除它,它将输出一次。

soup = BeautifulSoup(webpage)
for li in soup.findAll('li'):
    lis.append(li)
for li in lis:
    print li.text.encode("utf-8")
于 2013-04-08T05:19:54.610 回答
1

Content-Type说它的编码是ISO-8859-1,但它在撒谎。使用 . 告诉 Beautiful Soup 忽略它的谎言from_encoding。你可以让 Beautiful Soup 做更少的工作,方法是给它一个只选择类的东西的SoupStrainerfor 。最后,您可以简化循环。全部一起:parse_onlycontent-tdfor

import urllib2
import bs4

webpage = urllib2.urlopen('http://facts.randomhistory.com/interesting-facts-about-cats.html')
soup = bs4.BeautifulSoup(webpage, from_encoding='UTF-8',
                         parse_only=bs4.SoupStrainer(attrs='content-td'))
for li in soup('li'):
    print li.text.encode('utf-8')

您可以通过用单个空格替换连续的空格并删除上标来进一步改进输出。

于 2013-04-08T05:20:09.663 回答