使用美丽的汤,抓住<li>和</li>之间的东西

时间:2013-04-08 05:17:01

标签: python html tags web-scraping beautifulsoup

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

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”标签之间获取cat事实,并以一种看起来不会搞砸的方式输出它们。目前,此代码的输出重复所有事实4次左右,“不能”这个词出现为“不能”。

我很感激任何帮助。

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:1)

它的Content-Type表示其编码为ISO-8859-1,但它正在撒谎。告诉美丽的汤使用from_encoding忽略它的谎言。你可以通过给SoupStrainer parse_only content-td只选择for类的东西来减少工作量。最后,您可以简化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') 循环。一起来:

{{1}}

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