Как создать цикл while, который непрерывно обнаруживает изменения в очищенных данных? - PullRequest
0 голосов
/ 02 июля 2019

Я очищаю сайт.Тем не менее, я хочу создать код, который будет постоянно очищать веб-сайт и печатать каждый раз при изменении данных.Если данные не меняются, они остаются прежними.По сути, это будет означать, что мне не нужно нажимать кнопку «Выполнить», чтобы увидеть, изменились ли данные.

Я пытался выполнить цикл while, но не знал, как включить данные, которые я получил в Интернете.

import urllib
import urllib.request

from bs4 import BeautifulSoup

theurl = 'xyz'
thepage = urllib.request.urlopen(theurl)

soup = BeautifulSoup(thepage, 'html.parser')

data = soup.find('div' , ( 'class' , 'sticky')). text

print(data)  

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Этот скрипт поможет вам начать.Каждую 1секрипт скрипт будет очищать страницу и проверять наличие изменений.Если есть изменения, возвращает старое и новое значение:

from bs4 import BeautifulSoup
import requests
from time import sleep

url = 'https://www.random.org/integers/?num=1&min=1&max=2&col=5&base=10&format=html&rnd=new'

def get_data(url):
    return BeautifulSoup(requests.get(url).text, 'lxml')

def watch(url, seconds=1):
    soup = get_data(url)
    old_data = soup.select_one('pre.data').text.strip()
    while True:
        sleep(seconds)
        soup = get_data(url)
        data = soup.select_one('pre.data').text.strip()
        if data != old_data:
            yield old_data, data
        old_data = data

for old_val, new_val in watch(url):
    print('Data changed! Old value was {}, new value is {}'.format(old_val, new_val))

Печать (например):

Data changed! Old value was 1, new value is 2
Data changed! Old value was 2, new value is 1
Data changed! Old value was 1, new value is 2
Data changed! Old value was 2, new value is 1
Data changed! Old value was 1, new value is 2
Data changed! Old value was 2, new value is 1

...and so on.

Вам необходимо изменить URL и выбрать правильный элемент HTML в соответствии с вашими потребностями.

0 голосов
/ 02 июля 2019

что-то вроде этого может сделать работу:

import urllib.request
import time
from bs4 import BeautifulSoup
theurl = 'http://example.com'
# first iteration
thepage = urllib.request.open(theurl)
lastsoup = thissoup = BeautifulSoup(thepage, 'html.parser')
data = soup.find('div' , ( 'class' , 'sticky')). text
print(data)
while True:
    thepage = urllib.request.open(theurl)
    thissoup = BeautifulSoup(thepage, 'html.parser')
    if thissoup != lastsoup:
        data = soup.find('div' , ( 'class' , 'sticky')). text
        print(data)
    time.sleep(30) # sleep 30 seconds before looping
...