我正在解析jeevansathi.com并希望选择<ul>
,其ID为#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
答案 0 :(得分:3)
内容是动态加载的,您可以在请求返回的内容中查看模板,或者在浏览器中查看视图源:
<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()
这会给你带有id profileInfo2 的ul,如果你想让你里面的每个li也可以使用css选择器:
lis = dr.find_elements_by_css_selector("#profileInfo2 li")
从每个文本中提取文字:
[li.text for li in lis])
你可能想要所有你能得到的:
all_uls = dr.find_elements_by_css_selector("ul[id^=profileInfo]")
答案 1 :(得分:-1)
如果您在浏览器中禁用了javascript,则内容#profileInfo2在页面中不存在,因此如果没有javascript,它将不会显示在python中。
您可以通过使用Firefox和活动的NoScript Addon访问该站点,并在html源代码中搜索#profileInfo2来轻松验证这一点。