2015-12-19 6 views
1

В образовательных целях я пытаюсь очистить this page, используя lxml и запросы в Python.Python lxml xpath no output

В частности, я просто хочу напечатать исследовательские области всех профессоров на странице. Это то, что я делал до сих пор

import requests 
from lxml import html 

response=requests.get('http://cse.iitkgp.ac.in/index.php?secret=d2RkOUgybWlNZzJwQXdLc28wNzh6UT09') 
parsed_body=html.fromstring(response.content) 

for row in parsed_body.xpath('//div[@id="maincontent"]//tr[position() mod 2 = 1]'): 
    for column in row.xpath('//td[@class="fcardcls"]/tr[2]/td/font/text()'):   
     print column.strip()  

Но он ничего не печатает. Я довольно много боролся с xpaths и в основном использовал функцию xpath для копирования в хроме. Я следил за тем, что было сделано в следующих SO-ответах/ответах, и немного очистил мой код и избавился от «tbody» в xpaths. Тем не менее код возвращает пробел.

1. Empty List Returned

2. Python-lxml-xpath problem

ответ

2

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

Вот полный рабочий код имена печати и перечень направлений исследований по имени:

import requests 
from lxml import html 

response = requests.get('http://cse.iitkgp.ac.in/faculty4.php?_=1450503917634') 
parsed_body = html.fromstring(response.content) 

for row in parsed_body.xpath('.//td[@class="fcardcls"]'): 
    name = row.findtext(".//a[@href]/b") 
    name = ' '.join(name.split()) # getting rid of multiple spaces 

    research_areas = row.xpath('.//*[. = "Research Areas: "]/following-sibling::text()')[0].split(", ") 

    print(name, research_areas) 

Идея здесь используется тот факт, что все «профессор блоков» расположены в td элементов с class="fcardcls" , Для каждого блока получайте имя из жирного текста ссылки и областей исследования из следующей строки после Research Areas: полужирный текст.

+0

Ваш код работает отлично, и я понимаю, что вы написали, спасибо. Теперь у меня есть пара вопросов: 1. Как вы узнали основную страницу содержания, то есть [этот] (http://cse.iitkgp.ac.in/faculty4.php?_=1450503917634) 2. В моем коде какая ошибка в xpath я написал? Они указывали на правильный элемент (области исследований), когда я проверял «проверку» хром. – humblenoob

+1

@humblenoob в порядке, конечно - 1. Я только что использовал инструменты разработчика браузера и проверил, какие запросы были отправлены во время загрузки страницы; 2. ваш код был в целом на правильном пути - ну, по крайней мере, одно дело в том, что внутреннее выражение xpath должно начинаться с точки, которая должна быть контекстной. Надеюсь, что ответ помог. – alecxe

Смежные вопросы