python-2.7 - python lxml xpath没有输出

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

出于教育目的,我尝试使用lxml和Python中的请求抓取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问题/答案中的操作,并相当多地清理了我的代码,并在xpaths中摆脱了“ tbody”。代码仍然返回空白。

1. Empty List Returned

2. Python-lxml-xpath problem

最佳答案

首先,通过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:粗体文本之后,从粗体链接文本中获取名称,并从以下字符串中获取研究区域的名称。

关于python-2.7 - python lxml xpath没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367639/

相关文章:

python - 有没有一种简单的方法可以使 unicode 在 python 中工作?

python - 使用 python 2.4 计算 CSV 文件中的列数

python - python OpenCV(cv2)中的中文编码putText方法

python - 使用 self 访问类方法和变量

multithreading - 通过 golang 进行 gitlab 抓取的问题

javascript - 如何使用 Python(最好是 pandas)从 Javascript 表中抓取数据?

xpath - Selenium IDE - 如何在 Firefox 插件中记录 xpath

xml - 我如何让 Nokogiri 了解我的 namespace ?

java - 通过仅知道另一个节点的子节点的 xPath 获取值 - selenium

javascript - 使用 Python 下载 JavaScript 加载的音频