如何使用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")
我打开网站,然后遍历每个单词,检查这个单词是否在网站上。需要注意的是,我使用的是一个包含所有这些单词的网站(这个网站是我自己搭建的,我可以确认它是有效的),链接就是这个网站的地址。
问题是,我总是看到“未找到单词”,似乎从来没有找到网站上的单词。
代码哪里出问题了?看起来是语义错误,因为语法是没问题的,而且没有抛出异常(虽然在我的最终版本中我有异常处理,但即使抛出异常也会报告出来)。
2 个回答
2
如果你能解码链接的内容,那就更好了。不然的话,它会被当作字节来读取。我之前也遇到过类似的问题。你可以试试
temp = urllib.request.urlopen(link)
HTML = temp.read().decode("utf-8")
这个方法会使用Unicode来解码链接。不过,链接可能并不是用Unicode编码的。你可以通过请求网站的头信息来找出它的编码方式。
7
urlopen()
这个函数会返回一个“像文件一样的对象”。要读取其中的数据,你需要调用read()
:
site = urllib.request.urlopen(link).read()
当然,还有其他方法可以读取数据,但这种方法是将整个页面的数据快速加载到内存中,方便你进行搜索。
你的代码之所以能正常工作,是因为这个像文件一样的对象是可以被遍历的,也就是说你可以用in
操作符来使用它。不过,它并没有按照你想要的方式工作。