@gndkg

Как достать данные из тега?

Здравствуйте. Сайт который я парсингую содержит таблицу с данными, все данные получил кроме одной(там какие-то даты). Вот шаблон:
<td _ngcontent-serverapp-c76="" class="text-center">
    <app-tooltip _ngcontent-serverapp-c76="" _nghost-serverapp-c75="">
        <div _ngcontent-serverapp-c75="" class="unselectable" style="opacity: 0; height: 0px; color: white !important;">
            <div _ngcontent-serverapp-c75="" id="0.9803359351245351" style="font-weight: normal; display: none;">
                27.08.2024 19:50
            </div>
        </div>
        <div _ngcontent-serverapp-c75="">
            <p _ngcontent-serverapp-c75="" ngx-clamp="" style="overflow-wrap: break-word; font-weight: normal; overflow: hidden; text-overflow: ellipsis; -webkit-box-orient: vertical; display: -webkit-box;">
                27.08.2024 19:50
            </p>
            <div _ngcontent-serverapp-c75="">
                <!---->
            </div>
        </div>
        <!---->
        <!---->
        <!---->
        <!---->
        <!---->
    </app-tooltip>
    <!---->
    <!---->
    <!---->
    <!---->
    <!---->
</td>


Вот мой код:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "https://etender.gov.az/main/competitions"

driver = webdriver.Chrome()
driver.get(url)

def get_page_info():
    names_and_selling_items = driver.find_elements(By.CSS_SELECTOR, 'div.sub__title')

    # Не работующая часть
    element = driver.find_element(By.CSS_SELECTOR, "td.text-center p")
    date_text = element.text.strip()
    print(date_text)
    
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.LINK_TEXT, 'Ətraflı')))
    link_elements = driver.find_elements(By.LINK_TEXT, "Ətraflı")

    names = [names_and_selling_items[i].text for i in range(0, len(names_and_selling_items), 2)]
    selling_items = [names_and_selling_items[i].text for i in range(1, len(names_and_selling_items), 2)]

get_page_info()

driver.quit()

после запуска программы вместо ```27.08.2024 19:50``` выводит ничего. С чем это связано?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
alsolovyev
@alsolovyev
¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
66ce38f823106833102800.png
66ce3c46df02d322388001.png

Ваш код работает правильно, если он должен извлекать текст из первого элемента p в элементе td class="text-center".
Однако, если ваша цель — извлечь дату из 4 колонки, то нужно изменить селектор для поиска.

Если использовать парсер, то я бы сделал так:
1. Нашел бы все строки tr, которые содержат данные
2. Для каждой строки (tr) получил бы все колонки (td)
3. Извлек бы нужные данные (например, дату) из соответствующей колонки
4. Сохранил бы эти данные в массиве
5. Дальше бы уже использовал бы

Но можно же просто отправить запрос и получить все эти данные в формате json, так не проще?
Вот ссылка, которую можно в браузере открыть - https://etender.gov.az/api/events?EventType=2&Page...
Обычный GET запрос отправляете и получаете:
{
  "currentPage": 1,
  "totalPages": 173,
  "pageSize": 15,
  "itemsInPage": 15,
  "totalItems": 2591,
  "items": [
    {
      "eventId": 314749,
      "eventType": 7,
      "eventStatus": 1,
      "buyerOrganizationName": "NAXÇIVAN MUXTAR RESPUBLİKASI QAZ İSTİSMAR XİDMƏTİ",
      "eventName": "Qaz tikinti quraşdırma materialları və avadanlıqlarının satınalınması",
      "publishDate": "2024-08-27T19:50:59",
      "endDate": "2024-09-18T18:00:00",
      "hasNewVersion": false,
      "awardedParticipantName": null,
      "awardedParticipantVoen": null,
      "documentViewType": 0,
      "actualVersionId": 0,
      "privateRfxId": 93247
    }
.....
  ]
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы