如何使用Python检查网页上是否包含特定单词?

1 投票
2 回答
13760 浏览
提问于 2025-04-17 06:43

我有一份单词列表,在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操作符来使用它。不过,它并没有按照你想要的方式工作。

撰写回答