【问题标题】:Python Code to monitor and detect changes in website's scraped content/HTML code in current/Real-Time [closed]用于监控和检测当前/实时网站抓取内容/HTML代码的变化的Python代码[关闭]
【发布时间】:2022-01-01 07:03:37
【问题描述】:

我开始使用Beautiful Soup 抓取网站内容和 HTML 代码。我想要一个 Python 代码,它可以存储当前/实时的抓取内容或 HTML 代码。然后在特定的手动分配的时间间隔之后,代码应该再次执行并抓取同一网站或网页的内容或 HTML 代码。然后它应该比较两个抓取的数据并显示发生的任何变化。我希望这段代码能够监控网站上发生的变化并报告它们。

到目前为止我做了什么:

import requests
from bs4 import BeautifulSoup

url ="https://www.uetmardan.edu.pk/uetm/"

# Step1: Get the HTML content
r = requests.get(url)

# Step2: Parse the HTML content
soup = BeautifulSoup(r.content, 'html5lib')

#print(soup.prettify()) # just printing the HTML code

print(soup.get_text()) # just printing the text

【问题讨论】:

  • 听起来你很清楚自己想要什么,你的问题是什么?
  • 此代码抓取数据或内容。我知道我想要什么,但问题在于实施。我想要一个可以执行我提到的上述任务的代码
  • 您是否尝试过实现您想要的,是否遇到了您有疑问的特定错误或问题?
  • 计时的东西很简单。 while True:/...do stuff.../time.sleep(5*60)。其余的取决于您要比较的内容。
  • 您必须知道要监控哪些信息。我们对此无能为力。当然,您可以将整个页面存储到一个文件中,然后一次比较整个文本,但这可能不太有用。我假设页面上有您想要监控的内容。我们不知道。

标签: python html web-scraping beautifulsoup


【解决方案1】:

那么简单的循环呢?你甚至可以把它穿出来:

from time import sleep

while True:
    try:
        #your code#
    except KeyboardInterrupt: #so you can break the loop
        #maybe some clean up
        break
    #maybe catch something else

    sleep(interval)

关于存储,只需将其作为逻辑的一部分。使用数据库或文件或通过电子邮件发送。也许只有在有变化时才存储它。你有很多选择。

【讨论】:

  • 先生,您的代码不错,但我还是不明白如何实时存储数据并比较数据以监控和识别变化?
  • @RomanKhattak 存储数据,您可以在while True: 内使用标准open()write()close()。至于比较 - 这取决于你想要得到什么。如果您只想获得True/False,那么只需使用old_text == new_text。如果您想检查 HTML 中的某些特殊元素,请使用 BeautifulSoup 获取此元素并再次使用 == 将其与以前的版本进行比较。但这一切都取决于您在 HTML 中拥有的内容以及您想要比较的元素 - 但您没有显示 HTML 或 URL,所以我们无能为力。
  • @furas,我的问题很简单,请不要混淆。我想找到网站中发生的所有更改(内容/HTML 代码)。为此,我想要一个解决方案。我遇到的理论解决方案是我抓取网站内容/ HTML 代码。然后一段时间后,我的代码将再次抓取数据并比较两个数据,然后检测并报告发生的每一个变化。但我不知道如何实现这个概念。所以如果可以的话,请帮忙。
  • @RomanKhattak 您的问题很简单,但真正的解决方案可能很复杂。问题使显示更改两页。获取页面很简单,您检查您的本地文件是否具有以前的版本 - 如果您没有,则保存它。下一次等待/睡眠一段时间或一段时间后再次运行程序。下次您再次获取页面时,再次检查您是否有以前版本的本地文件 - 如果有,则加载它并与当前版本进行比较,显示差异,并将新版本保存在本地文件中。一段时间后再次休眠或运行程序。问题是显示差异。
  • @RomanKhattak 正如我所说的,问题是比较两个文件。它们可能有不同的长度,因此逐个字符比较可能不会显示哪个部分发生了变化。您必须使用BeautifulSoup 来比较页面上的元素/标签 - 如果页面没有改变结构,它可能会起作用。它只需要第一个文件中的每个元素并检查它是否存在于新文件中 - 因为元素是嵌套的,所以它可能还需要嵌套 for-loops 或 recurction。但是如果某个元素从一个标签移动到另一个标签(或者在旧标签之前有新标签),那么它就会产生非常复杂的问题。
猜你喜欢
  • 2013-12-31
  • 2017-12-19
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2020-03-22
  • 2021-03-08
  • 2011-11-05
  • 2014-05-11
相关资源
最近更新 更多