Как ориентироваться в конкретном теге в красивом супе? - PullRequest
0 голосов

Я хочу перемещаться по конкретному тегу на сайте.на этом сайте есть несколько одинаковых тегов, и я хочу перейти только по одному из них.каждый раз, когда я запускаю код, я получаю разные выходные данные.

import bs4 as bs
import urllib

source = urllib.urlopen("https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98").read()
soup = bs.BeautifulSoup(source, 'lxml')

for paragraph in soup.find('div', style = "width: 40%;/* float: left; */"):
    print(paragraph)

1 Ответ

0 голосов
/ 27 января 2019

Каждый раз, когда я запускаю код, я получаю разные выходные данные.

Да.Каждый раз, когда страница возвращает разные результаты.Даже если ваш выбор неверен, это не объясняет, что вы каждый раз печатаете разные результаты.Я запускал это несколько раз и каждый раз получал разные результаты.

from bs4 import BeautifulSoup
import requests
import pandas as pd
r = requests.get("https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98")
df=pd.read_html(r.text)
print(df)

Выходы

Прогон № 1

[    0       1       2       3       4       5        6      7
0 NaN   ---00  2.4992  2.5700    2.64    2.63  2.59100  ---00
1 NaN   ---00  2.3593  2.4800    2.58   ---00     2.53  ---00
2 NaN   ---00  2.0493  2.2495   ---00  2.0500   2.2400  ---00
3 NaN   ---00  2.4300  2.5300    2.63  2.4510     2.58  ---00
4 NaN  2.3593  2.4100  2.4900  2.6300  2.4910     2.59  ---00
5 NaN   ---00  2.1593  2.4295   ---00  2.2010   2.4500  ---00
6 NaN  2.0400  2.1493  2.2495   ---00    2.05    ---00   2.24]

Прогон № 2

[    0       1       2       3       4       5        6      7
0 NaN   ---00  2.3593  2.4800    2.58   ---00     2.53  ---00
1 NaN   ---00  2.4300  2.5300    2.63  2.4510     2.58  ---00
2 NaN   ---00  2.1593  2.4295   ---00  2.2010   2.4500  ---00
3 NaN  2.3593  2.4100  2.4900  2.6300  2.4910     2.59  ---00
4 NaN  2.0400  2.1493  2.2495   ---00    2.05    ---00   2.24
5 NaN   ---00  2.4992  2.5700    2.64    2.63  2.59100  ---00
6 NaN   ---00  2.0493  2.2495   ---00  2.0500   2.2400  ---00]

В идеале, согласно вашему коду, вы должны получать результат 2.41 каждый раз, когда запускаете свой код (приведенный в вопросе).

enter image description here

Что происходит, так это то, что эта страница выполняет некоторую авторизацию JavaScript в фоновом режиме и только затем заполняет действительные данные.

Для этих типов страниц лучше использовать селен .

from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
driver = webdriver.Firefox()
driver.get('https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98')
source = driver.page_source
soup =BeautifulSoup(source, 'lxml')
for paragraph in soup.find('div', style = "width: 40%;/* float: left; */"):
    print(paragraph)

Выход

Прогон № 1

2.41

Прогон № 2

2.41
...