使用Python爬取英语单词
我想从比如《纽约时报》的首页上抓取所有的英文单词。我在Python中写了类似这样的代码:
import re
from urllib import FancyURLopener
class MyOpener(FancyURLopener):
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
opener = MyOpener()
url = "http://www.nytimes.com"
h = opener.open(url)
content = h.read()
tokens = re.findall("\s*(\w*)\s*", content, re.UNICODE)
print tokens
这个方法还不错,但我抓取到了像“img”、“src”这样的HTML关键词,还有英文单词。我想知道有没有简单的方法,只抓取网页中的英文单词呢?
我看到过这个帖子,它似乎只讨论了抓取的技术细节,提到的工具也没有讲怎么过滤掉非语言的元素。我对链接、格式等都不感兴趣,只想要纯粹的单词。希望能得到一些帮助。
5 个回答
1
Html2Text 是一个不错的选择。
首先,你需要导入 html2text 这个库。
然后,你可以用下面的代码把你的 HTML 字符串转换成纯文本:
print html2text.html2text(your_html_string)
1
你需要一个英语词典作为参考。一个简单的方法就是使用拼写检查工具。比如说,PyEnchant这个工具就很合适。
在PyEnchant的网站上,你可以找到相关的信息:
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>>
在你的情况下,可能可以这样做:
d = enchant.Dict("en_US")
english_words = [tok for tok in tokens if d.check(tok)]
如果这样还不够,而且你不想要出现在HTML标签里的“英语单词”(比如属性里面的单词),你可以使用BeautifulSoup来提取出重要的文本。
4
你确定你想要的是“英语”单词吗?这里的意思是它们在某个字典里能找到吗?比如说,如果你抓取了一篇《纽约时报》的文章,你会想要包括“奥巴马”(或者对于你们蓝州的人来说的“佩林”)这些词吗?尽管它们可能还没有出现在任何字典里。
在很多情况下,最好是解析HTML(就像Bryan建议的那样,用BeautifulSoup),只提取文本节点(也许还可以加上一些面向人类的属性,比如“标题”和“替代文本”)。