在Python中抓取网页时遇到的问题

时间:2012-06-05 08:52:59

标签: python

所以,我写了一个最小的函数来从网页上删除所有文本:

url = 'http://www.brainpickings.org'
request = requests.get(url)
soup_data = BeautifulSoup(request.content)
texts = soup_data.findAll(text=True)

def visible(element):
    if element.parent.name in ['style', 'script', '[document]', 'head', 'title']:
        return False

    return True
print filter(visible,texts)

但是,它并不顺利。还有不必要的标签。另外,如果我尝试删除我不想要的各种角色,我会得到一个

error     elif re.match('<!--.*-->', str(element)):
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 209: ordinal not in range(128)

因此,如何更好地改进这一点以使其更好?

1 个答案:

答案 0 :(得分:1)

使用lxml这很简单:

from lxml import html

doc = html.fromstring(content)
print doc.text_content()

编辑:过滤头部可按以下方式完成:

print doc.body.text_content()