python-3.x - 如何创建一个持续检测列表中抓取的数据是否更改的while循环
问题描述
import time
from bs4 import BeautifulSoup
import requests
from urllib.request import Request, urlopen
pages = ["movies", "series"]
printed = []
for page in pages:
req = Request("https://www.thenetnaija.com/videos/" + page, headers={'User-Agent': 'XYZ/3.0'})
webpage = urlopen(req, timeout=10)
b4 = BeautifulSoup(webpage, "html.parser")
movie_list = b4.find_all("div", {"class" : "video-files"})
for allContainers in movie_list:
filmName = allContainers.find('img').get('alt')
printed.append(filmName)
print(printed)
for get in printed:
requests.get("https://api.telegram.org/bot:AAEapVykIXdphGYaH5ZjXuhpFaFw7wpi5Bs/sendMessage?chat_id=&text={}".format(get))
我想使用 while 循环让程序无限运行,并且仅在列表中的数据发生更改时才将请求发送到我的电报聊天。
解决方案
您可以将此示例用作如何定期检查电影/连续剧的基础(该示例set.difference
用于确定是否有更改):
import time
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
def get_movies(url):
headers = {"User-Agent": "XYZ/3.0"}
req = Request(url, headers=headers)
b4 = BeautifulSoup(urlopen(req, timeout=10), "html.parser")
return set(a.get_text(strip=True) for a in b4.select("h2 a"))
url = "https://www.thenetnaija.com/videos/{}"
pages = {
"movies": get_movies(url.format("movies")),
"series": get_movies(url.format("series")),
}
while True:
time.sleep(10) # <-- sleep 10sec before checking again
for k, v in pages.items():
new_movies = get_movies(url.format(k))
difference = new_movies.difference(v)
if difference:
print("New {}:".format(k))
print(difference)
pages[k] = new_movies
# do stuff here (post to telegram etc.)
# ...
else:
print("No new {}".format(k))
推荐阅读
- performance - 如何查看 Jenkins 任务/构建/项目持续时间的历史图表?
- arrays - 将给出的答案解释为两个数组
- asp.net-mvc - 在 NopCommerce 中更改 Razor 视图后,它们不会更新
- css - 如何让 base64 编码的 SVG 过滤器在 Firefox 以外的其他浏览器中工作?
- javascript - 将值从一个属性移动到另一个属性
- jquery - id 在视口中时突出显示菜单项
- javascript - 带有组件的 Google 地图地理编码请求 - 语法
- html - 嗨,我有两个关于 CSS 的问题
- ruby-on-rails - Ruby on Rails - 在新页面/控制器上显示用户名
- ios - 收到此错误消息 Swift 4.2:实例成员 'jpegData' 不能用于类型 'UIImage';你的意思是使用这种类型的值吗?