2011-11-20 90 views
1

我有一个单词列表,在Python中我需要遍历每个单词并检查单词是否在网站上。使用Python检查某个单词是否在网页上?

目前,这是我有什么(关于这个问题)一个片断:

words = ['word', 'word1', 'word2'] 
site = urllib.request.urlopen(link) 
for word in words: 
    if word in site: 
     print(word) 
    else: 
     print(word, "not found") 

我有一个单词列表,我打开网站,我遍历每个字检查单词在网站中。请注意,我正在使用一个包含所有这些词的网站(我自己设置了它,我可以验证它是否有效),链接是网站的网址。

的问题是,我经常去“没有发现”,它似乎永远不会在网站上找到的话。

代码有什么问题?它似乎是一个语义错误,因为语法工作正常,并没有抛出异常(虽然在我的最后,我确实有异常处理,但它仍然会报告异常是否抛出异常)。

+0

@larsmans你是什么意思的urllib.request.urlopen是一个公然的错误?它出什么问题了? – Bhaxy

+2

@larsmans:['urllib.request.urlopen'](http://docs.python.org/py3k/library/urllib.request)有什么问题?也许你不熟悉Python 3的标准库? –

+0

@GregHewgill,Bhaxy:对不起,误解了我的错误信息。我还没有真正赶上Python 3库的速度。 –

回答

6

urlopen()函数返回一个“类文件对象”。为了读取数据,你必须调用read()

site = urllib.request.urlopen(link).read() 

还有其他的方法来读取过的数据,但这是整个页面的数据加载到内存中,以便快速搜索的简单方法。

您的代码按写入方式工作的原因是因为文件类对象也是可迭代的,这意味着它可以与in运算符一起使用。但它没有做你想做的事。

+0

好吧,所以它现在似乎工作,我已经完成了打印(网站),我已经看到它似乎下载的网站,但我在网站上的文字是在下载。我用我的代码,我也复制并将结果粘贴到记事本中,但无法找到结果。怎么了? – Bhaxy

+3

您正在查找的单词可能并不存在于下载的HTML中。当页面加载到浏览器中时,它们可能会在稍后使用Javascript添加到DOM中。如果没有关于您正在加载的网页和您要查找的字词的更多信息,则很难提供更具体的答案。 –

1

这也有助于解码链接内容。否则它被读为字节。我有类似的问题。尝试

temp = urllib.request.urlopen(link) 
HTML = temp.read().decode("utf-8") 

这将使用Unicode 链接可能不使用Unicode编码解码的链接。你可以找出编码请求的网站标题

+0

谢谢,这解决了我在Greg Hewgill的回答中提出的问题。 – Bhaxy

+1

temp.getheader('Content-Type')应该返回编码类型的信息。如果这不起作用,请尝试通常在英文网站上正常工作的utf-8 – Oliver

+1

只是为了澄清这方面的一个常见错误。您不是使用Unicode解码文本,而是使用UTF-8字符集将文本解码为unicode字符串。 Unicode与UTF-8(或其他任何字符集)并不相同。阅读http:// www。joelonsoftware.com/articles/Unicode.html获取有关该主题的更多信息。 – Epcylon

相关问题