解析时获取空列表

2024-09-23 06:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析jeevansathi.com网站想要选择id为<ul>#profileInfo2,但是在使用BeautifulSoup之后,我得到的是空列表,下面是代码和输出

import requests, bs4
res = requests.get('http://www.jeevansathi.com/search/quick/169903999/1')
try:    
  res.raise_for_status()
  nazia=bs4.BeautifulSoup(res.text)
  print type(nazia)
  elems=nazia.select("#profileInfo2")
  print type(elems)
  print len(elems)
except Exception as exc:
  print("There was a problem: %s" % (exc))

输出为

<class 'bs4.BeautifulSoup'>
<type 'list'>
0

Tags: comid网站typeresulrequestsexc
2条回答

内容是动态加载的,您可以在请求返回的内容中查看模板,或者查看浏览器中的视图源:

<div class="pt10 fontlig colr4 clearfix ulinline">
<ul id="profileInfo{profileNoId}" class="fl f14 wid83p descplist">
<li class="textTru">{age},  {height}</li>
<li class="textTru">{edu_level_new}</li>
<li class="textTru">{location}</li>
<li class="textTru">{occupation}</li>
<li class="textTru">{religion}, {caste}</li>
<li class="textTru">{income}</li>
<li class="textTru">{mtongue}</li>
<li class="textTru">{mstatus}</li>
</ul>

您可以使用selenium在浏览器中查看源代码,并将其与phantomjs结合以进行无头浏览:

from selenium import webdriver

dr = webdriver.PhantomJS()

dr.get('http://www.jeevansathi.com/search/quick/169903999/1')
ul = dr.find_element_by_id("profileInfo2")
print()

这将为您提供具有idprofileInfo2的ul,如果您希望每个li都在其中,您还可以使用css选择器:

lis = dr.find_elements_by_css_selector("#profileInfo2  li")

从每一条中提取文本:

 [li.text for li in lis])

你可能想要所有你能得到的uls:

all_uls = dr.find_elements_by_css_selector("ul[id^=profileInfo]")

如果在浏览器中禁用javascript,则页面中不会出现内容#profileInfo2,因此如果没有javascript,它也不会在python中显示。你知道吗

您可以通过使用Firefox和活动NoScript插件访问站点,并在html源代码中搜索#profileInfo2来轻松验证这一点。你知道吗

相关问题 更多 >