Веб-очистка текста с использованием Python дает пустой вывод

Я пытаюсь получить текст принадлежности по этой ссылке https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X

Это элементы, над которыми я работаю

<dl class = "affiliation"><dt><sup>a</sup></dt><dd>Department of Engineering, Università Campus Bio-Medico di Roma, Via Alvaro del Portillo, 21, 00128 Rome, Italy</dd></dl>

<dl class = "affiliation"><dt><sup>b</sup></dt><dd>Department of Chemical Sciences, University of Naples Federico II, Complesso Universitario di Monte Sant'Angelo, 80126 Napoli, Italy</dd></dl>

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

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

Я пытался:

from bs4 import BeautifulSoup
import requests

response = requests.get('https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X')
print('Response Body: ', response)
soup = BeautifulSoup(response.content.decode('utf-8'), "html.parser")

for aff in soup.find_all('dl', class_='affiliation'):
    affiliation = aff.get_text()
    print(affiliation)

ожидаемый результат:

Department of Engineering, Università Campus Bio-Medico di Roma, Via Alvaro del Portillo, 21, 00128 Rome, Italy
Department of Chemical Sciences, University of Naples Federico II, Complesso Universitario di Monte Sant'Angelo, 80126 Napoli, Italy

Редактировать: При посещении веб-сайта нажмите «Показать больше», чтобы увидеть текст принадлежности.

🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.


1
63
1

Ответ:

Решено

1. Требуемые данные, получаемые после нажатия кнопки «Показать больше», визуализируются с помощью JavaScript. So Beautiful Soup не может его имитировать.

2.Сайт находится под защитой Cloudflare:

https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X is using Cloudflare DNS!

https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X is using Cloudflare CDN/Proxy!

https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X is using Cloudflare SSL!

3. Одним из лучших решений является применение селена с bs4, чтобы нажать кнопку «Показать больше» и решить проблему с Cloudflare.

Рабочий код:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By


options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
#options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
url = 'https://www.sciencedirect.com/science/article/abs/pii/S001191642300142X'
driver.get(url)
time.sleep(3)

driver.find_element(By.XPATH, '//span[@class = "button-link-text" and contains(text(), "Show more")]').click()
time.sleep(2)

soup = BeautifulSoup(driver.page_source, "html.parser")

txt = [x.get_text().strip() for x in soup.select('[class = "AuthorGroups text-s"] dl dd')]
print(txt)

driver.quit()

Выход:

['Department of Engineering, Università Campus Bio-Medico di Roma, Via Alvaro del Portillo, 21, 00128 Rome, Italy', "Department of Chemical Sciences, University of Naples Federico II, Complesso Universitario di Monte Sant'ly', "Department of Chemical Angelo, 80126 Napoli, Italy", 'Department of Chemical Engineering Materials & Environment, Sapienza University  'Department of Chemical Engi
of Rome, Via Eudossiana, 18, 00184 Rome, Italy', 'Department of Chemical Engineering, School of Engineering, Thnt of Chemical Engineering, Se University of Manchester, Oxford Road, Manchester, M13 9PL, United Kingdom']