Как получить текст этих абзацев с помощью селена и xpath

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

вот мой код.

    base_url = "https://www.enabel.be/content/enabel-tenders"
    driver.get(base_url)
    WebDriverWait(driver , 10).until(EC.visibility_of_element_located(
            (By.XPATH , "//*[@id='block-views-tenders-block']/div/div/div[@class='view-content']/div")))

    current_page_tag = driver.find_element(By.XPATH ,
                                               "//*[@id='block-views-tenders-block']/div/div/div[3]/ul/li[2]").text.strip()
    all_divs = driver.find_elements(By.XPATH ,
                                        "//*[@id='block-views-tenders-block']/div/div/div[@class ='view-content' "
                                        "]/div")


      for each_div in all_divs :

            singleData = {
                # could not detect
                "language" : 107 ,
                # means open
                "status" : 0 ,
                "op_link" : "" ,
                "website" : website_name ,
                "close_date" : '' ,
                # means not available
                "organization" : website_name ,
                "description" : "" ,
                "title" : '' ,
                "checksum" : "" ,
                # means not available
                "country" : '' ,
                "published_date" : ''
            }

            singleData['title'] = each_div.find_element(By.XPATH ,
                                                        ".//span[@class='title-accr no-transform']").text.strip()
    
                singleData['country'] = each_div.find_element(By.XPATH ,
                                                              ".//div[1]/div/div/div[@class ='field-items']/div").text.strip()
                close_date = each_div.find_element(By.XPATH , ".//div//div[1]/div").text.strip()
    
                 #description always returns me empty text.
                description = each_div.find_element(By.XPATH, ".//div/div[2]/div[3]/div[2]/div/p").text.strip()
                download = each_div.find_elements_by_xpath('.//div//div[2]/div[4]/div[2]//a')
                download_file_link = []
                for eachfile in download :
                    download_file_link.append(eachfile.get_attribute('href'))

мой код может получить заголовок, страну, крайний срок и его вложение, но не может получить часть описания. он возвращает мне пустой текст, но когда я вижу его на веб-сайте, в нем есть текст.

может ли кто-нибудь помочь мне с проблемой и решением. заранее спасибо

Не у всех есть раздел описания.

Arundeep Chohan 14.12.2020 08:23

Я попытался просмотреть вашу страницу и заметил, что поле описания не отображается по умолчанию. Вы устанавливаете определенные значения в раскрывающемся списке фильтров вверху, чтобы получить эти значения, которые содержат описание?

Mugen 14.12.2020 08:24

Укажите ссылку на страницу с описанием или HTML-код.

Mugen 14.12.2020 08:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

for each_div in all_divs :
     #description always returns me empty text.
    try:
        description = each_div.find_element(By.XPATH, ".//div[contains(text(),'Description')]/parent::div/div[2]//p[1]").get_attribute('innerHTML')
        print(description)
    except:
        print('none')

Выходы

This is the annual publication of information on recipients of funds for the TVET Project. 
none
At the latest 14 calendar days before the final date for receipt of tenders (up to 4th January 2021), tenderers may ask questions about the tender documents and the contract in accordance with Art. 64 of the Law of 17 June 2016. Questions shall be addressed in writing to:
Pour tout besoin d'information complémentaire, veuillez contacter: <a href = "mailto:[email protected]">[email protected]</a>
none
none
none
Marché relatif &nbsp;à &nbsp;la&nbsp;fourniture, &nbsp;l’installation, &nbsp;la &nbsp;mise &nbsp;en &nbsp;marche &nbsp;et&nbsp;formation des utilisateurs et techniciens chargé de la&nbsp;maintenance &nbsp;des &nbsp;équipements &nbsp;de &nbsp;Laboratoire&nbsp;destinés au CERMES.&nbsp;
Pour tout besoin d'information complémentaire, veuillez contacter: <a href = "mailto:[email protected]">[email protected]</a>
Tenders should request the price schedule in xls from Ms. Eva Matovu. email: <a href = "mailto:[email protected]">[email protected]</a>

Вы могли бы использовать

for each_div in all_divs :
     #description always returns me empty text.
    try:
        description = each_div.find_elements(By.XPATH, ".//div[contains(text(),'Description')]/parent::div/div[2]//p")
        for desc in description:
            print(desc.get_attribute('textContent'))
    except:
        print('none')

Выходы

This is the annual publication of information on recipients of funds for the TVET Project.
At the latest 14 calendar days before the final date for receipt of tenders (up to 4th January 2021), tenderers may ask questions about the tender documents and the contract in accordance with Art. 64 of the Law of 17 June 2016. Questions shall be addressed in writing to:
Françoise MUSHIMIYIMANA, National Expert in Contractualization & Administration _National ECA                                    ([email protected] ), with copy to
[email protected]
[email protected]

They shall be answered in the order received. The complete overview of questions asked shall be available as of at the latest 7 calendar days before the final date for receipt of tenders at the address mentioned above.
Pour tout besoin d'information complémentaire, veuillez contacter: [email protected]
Marché relatif  à  la fourniture,  l’installation,  la  mise  en  marche  et formation des utilisateurs et techniciens chargé de la maintenance  des  équipements  de  Laboratoire destinés au CERMES.
Pour tout besoin d'information complémentaire, veuillez contacter: [email protected]
Tenders should request the price schedule in xls from Ms. Eva Matovu. email: [email protected]

привет arundeep, некоторые из each_div имеют много тегов p, и каждый p содержит некоторый текст. Я хочу получить весь текст всех p, присутствующих в each_div. ваш код использует p[1] , если я удалю1 из p[1], код не даст требуемого результата. не могли бы вы отредактировать код таким образом, чтобы я получил текст всех тегов p.

Talib Daryabi 14.12.2020 11:45

На самом деле я пробовал, не получилось. Я пытаюсь снова сейчас.

Talib Daryabi 14.12.2020 11:48

Это станет списком, который вам нужно будет сделать в цикле.

Arundeep Chohan 14.12.2020 11:48

да, я просмотрел каждый пункт в описании и попытался использовать full_text = full_text + eachp..get_attribute('innerHTML'), но это не сработало. full_text определен над циклом, я правильно делаю?

Talib Daryabi 14.12.2020 12:00

Попробуйте что-то подобное, если хотите без тегов.

Arundeep Chohan 14.12.2020 12:11

Другие вопросы по теме