Python lxml xpath无输出

时间:2015-12-19 05:34:41

标签: python-2.7 xpath web-scraping python-requests lxml

出于教育目的,我试图在Python中使用lxml和请求来抓取this page

具体来说,我只想在页面上打印所有教授的研究领域。 这是我到目前为止所做的事情

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时遇到了很多困难,并且最初使用了chrome中的copy xpath功能。我按照以下SO问题/答案中所做的操作,并清理了我的代码,并在xpath中摆脱了'tbody'。代码仍然会返回一个空白。

1. Empty List Returned

2. Python-lxml-xpath problem

1 个答案:

答案 0 :(得分: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)

这里的想法是使用所有教授阻止"位于tdclass="fcardcls"元素中。对于每个块,请在Research Areas:粗体文本后从以下字符串中的粗体链接文本和研究区域中获取名称。