所以我正在尝试在线搜索用户。
这是HTML代码:
<div id="onlinecount">
<strong>
30,000+
</strong>
</div>
现在我假设使用LXML将//div[@id="onlinecount"]
刮掉其中的任何文本,我想从标签中获取数字,但是当我试图刮掉这个时,我最后得到一个空的列表
这是我的相关代码:
print "\n Grabbing users online now from",self.website
site = requests.get(self.website)
tree = html.fromstring(site.text)
users = tree.xpath('//div[@id="onlinecount"]')
请注意,self.website变量只是http://www.omegle.com
任何想法我做错了什么?注意我可以抓住其他部分而不是在线用户的数量。
我最终使用了一组我从朋友那里学到的不同代码。 这是我感兴趣的任何人的完整代码。 http://pastebin.com/u1kTLZtJ
答案 0 :(得分:1)
当您使用请求python模块向“http://www.omegle.com”发送GET请求时,我观察到的是site.text中没有“onlinecount”。原因是部分由javascript呈现。您应该使用能够执行javascript的库,并为您提供在浏览器中呈现的最终html源代码。一个这样的第三方图书馆是Selenium http://selenium-python.readthedocs.org/。唯一的缺点是它打开了一个真正的网络浏览器。
下面是使用selenium的工作代码和附带的屏幕截图:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.omegle.com")
element = browser.find_element_by_id("onlinecount")
onlinecount = element.find_element_by_tag_name("strong")
答案 1 :(得分:1)
您还可以在此http://front1.omegle.com/status
上使用GET方法将以JSON形式返回在线用户数和其他详细信息
答案 2 :(得分:0)
我已经对此进行了一些研究,页面的特定部分不是XML而是Javascript。
这是源代码(这是请求库在程序中返回的内容)
<div id="onlinecount"></div>
<script>
if (IS_MOBILE) {
$('sharebuttons').dispose();
$('onlinecount').dispose();
}
</script>
</div>
正如你所看到的,在lxml的眼中,只有一个脚本在onlinecount div中。
答案 3 :(得分:0)
我同意Praveen。
如果您想避免启动可见浏览器,可以使用PhantomJS ,它也有一个selenium驱动程序:
PhantomJS是一个带有JavaScript API的无头WebKit脚本
您可以编写PhantomJS js脚本而不是selenium脚本(但我认为您更喜欢使用Python env;)