我使用 python 抓取特定网站(在本例中为论坛)以将最新帖子的内容复制/粘贴到其他地方。为此,我的代码看起来像这样(不是完整的代码,找到的 url 还进行了一些其他操作):
import mechanicalsoup as msp
import time
browser=msp.StatefulBrowser()
sleeptime=30
while True:
Forum_url="url of the forum"
browser.open(Forum_url)
soup=browser.get_current_page()
parent_of_time_element_of_threads=soup.find_all('div',{'class':'ipsDataItem_meta ipsType_reset ipsType_light ipsType_blendLinks'})
list_of_all_dates=[] #date of each thread on the page
for i in parent_of_time_element_of_threads:
time_element_of_thread=i.findChild('time',recursive=True)['datetime']
date=time_element_of_thread.strip('Z')
list_of_all_dates.append(date)
arg_of_most_recent_thread=np.array(list_of_all_dates,dtype='datetime64').argmax()
url=parent_of_time_element_of_threads[arg_of_most_recent_thread].parent.find('a')['href']
time.sleep(sleeptime)
此时,我应该有最新线程的 url,它通常应该每 30 秒刷新一次,以获取新的最新帖子的 url,我用它来做一些其他操作。该技术效果很好,但有一个问题。
它确实设法在页面上获取最新帖子,但是当出现新帖子时,无论页面通过浏览器刷新的频率如何,都需要 5 分钟才能真正出现在汤元素中。打开
如果我自己通过浏览器进入论坛页面并强制刷新页面,例如,我会在 0:00 看到帖子 A 为最新,然后帖子 B 将在 0:45 出现。我希望在刷新发生时在 1:00 看到我的程序中的 url 更改,但脚本仍然返回最新的帖子 A,而帖子 B 只会在 5:30、6:00 左右显示为最新的.
页面加载更改好像花了整整 5 分钟,考虑到初始加载以正常速度发生,这很奇怪
我尝试在睡眠之前添加一个 soup.decompose() 以尝试确保浏览器在以下迭代中尝试论坛 url 时正确重置,但无济于事。我还尝试在每个循环中完全关闭 StateFull 浏览器,但这没有任何区别。我还确保日期查找逻辑是合理的,并且对我来说看起来是正确的,只是帖子 B 没有出现在汤对象中
有解决方案吗?