【问题标题】:Checking if certain words are on a web page using Python?使用 Python 检查某些单词是否在网页上?
【发布时间】:2014-05-09 01:00:53
【问题描述】:

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

目前,这是我所拥有的(与此问题有关)的 sn-p:

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

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

问题是,我总是去“word not found”,而且似乎从来没有在网站上找到单词。

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

【问题讨论】:

  • @larsmans urllib.request.urlopen 是一个明显的错误是什么意思?它有什么问题?
  • @larsmans:urllib.request.urlopen 有什么问题?也许您不熟悉 Python 3 的标准库?
  • @GregHewgill, Bhaxy:对不起,误解了我的错误信息。我确实还没有跟上 Python 3 库的速度。

标签: python web


【解决方案1】:

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

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

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

您的代码按所写的方式运行的原因是因为类似文件的对象也是可迭代的,这意味着它可以与in 运算符一起使用。但它并没有达到你想要的效果。

【讨论】:

  • 好的,所以它现在似乎可以工作了,我已经完成了 print(site) 并且我已经看到它似乎确实下载了该网站,但我在网站上放的词是在下载中。我使用了我的代码,并将结果复制并粘贴到记事本中,也找不到结果。怎么了?
  • 下载的 HTML 中可能没有您要查找的单词。也许它们稍后会在浏览器中加载页面时使用 Javascript 添加到 DOM 中。如果没有有关您正在加载的页面和您正在寻找的字词的更多信息,就很难提供更具体的答案。
【解决方案2】:

如果您解码链接内容,它也会有所帮助。否则它被读取为字节。我有一个类似的问题。试试

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

这将使用 Unicode 解码链接 链接可能未使用 Unicode 编码。您可以找出请求站点标头的编码

【讨论】:

  • 谢谢,这解决了我在评论中对 Greg Hewgill 的回答提出的问题。
  • temp.getheader('Content-Type') 应该返回有关编码类型的信息。如果这不起作用,请尝试通常适用于英语网站的 utf-8
  • 只是为了澄清一个常见的错误。您不是在“使用 Unicode”解码文本,而是使用 UTF-8 字符集将文本解码为 un​​icode 字符串。 Unicode 与 UTF-8(或任何其他字符集)不同。阅读joelonsoftware.com/articles/Unicode.html 了解有关该主题的更多信息。
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多