出于教育目的,我试图使用lxml和Python中的请求来抓取此页面。
具体来说,我只想在页面上打印所有教授的研究领域。这是我到目前为止所做的
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”。代码仍然返回空白。
首先,通过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:
粗体文本后的以下字符串中获取研究区域的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句