首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python lxml xpath无输出

Python lxml xpath无输出
EN

Stack Overflow用户
提问于 2015-12-19 05:34:41
回答 1查看 515关注 0票数 1

出于教育目的,我试图使用lxml和Python中的请求来刮取此页

具体来说,我只想把所有教授的研究领域印在页面上。这就是我到现在为止所做的

代码语言:javascript
复制
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()    

但它没有印刷任何东西。我在使用xpath时遇到了很大的困难,并且不习惯使用chrome中的复制xpath特性。我遵循了下面所做的,所以我的问题/答案,并清理了我的代码相当多,并摆脱了‘tbody’在xpath。代码仍然返回一个空白。

1.返回的空列表

2. Python-lxml-xpath问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-19 05:48:47

首先,内部包含所需数据的主要内容通过XHR请求从不同的端点加载--在代码中模拟这一点。

以下是完整的工作代码打印名称和每个名称的研究区域列表。

代码语言:javascript
复制
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)

这里的想法是使用以下事实:所有的“教授块”都位于带有class="fcardcls"class="fcardcls"元素中。对于每个块,从粗体链接文本中获取名称,并从下面的字符串( Research Areas:粗体文本之后)获取研究区域。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34367639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档