xpath возвращает пустой список при использовании запросов, но работает с selenium

#python #web-scraping #python-requests #lxml

#python #веб-очистка #python-запросы #lxml

Вопрос:

 import requests
from lxml import html
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
file = open("source_code.txt","w ")
url = "https://www.careers360.com/colleges/act-college-of-engineering-and-technology-kancheepuram"
page = session.get(url)
file.write(page.text)
content = html.fromstring(page.text)
intake = content.xpath("//div[@class='col-sm-12']//table//tbody//tr//td[contains(text(),'Total Student Enrollment')]//strong")
print(intake)
 

При использовании этого скрипта я получаю пустой список в качестве вывода.
Желаемый результат равен 100.
Тот же XPath работает с selenium, но не работает с этим скриптом.
Если у вас есть какое-либо решение для этого, пожалуйста, поделитесь.

Ответ №1:

проблема в теге html tbody

 import requests
from lxml import html
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
file = open("source_code.txt","w ")
url = "https://www.careers360.com/colleges/act-college-of-engineering-and-technology-kancheepuram"
page = session.get(url)
file.write(page.text)
content = html.fromstring(page.text)
intake = content.xpath("//div[@class='col-sm-12']//table//tr//td[contains(text(),'Total Student Enrollment')]//strong")
for item in intake: 
    print(html.tostring(item))
 

Результат:
b’100

Комментарии:

1. Большое вам спасибо за ваш быстрый ответ.

2. Я использовал ‘print (intake [0].text)’, чтобы получить значение — 100.

Ответ №2:

Почему бы вам не попробовать напрямую, как показано ниже? Вам не нужно создавать цикл для анализа требуемого результата.

 import requests
from lxml.html import fromstring

url = "https://www.careers360.com/colleges/act-college-of-engineering-and-technology-kancheepuram"

with requests.Session() as s:
    page = s.get(url)
    content = fromstring(page.text)
    intake = content.xpath("//table[@class='baseUl']//td[contains(.,'Total Student Enrollment')]/strong")[0].text.strip()
    print(intake)