omegle lxml刮不工作

时间:2014-01-07 17:25:12

标签: python html xpath lxml

所以我正在尝试在线搜索用户。

这是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

4 个答案:

答案 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")

enter image description here

答案 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驱动程序

http://phantomjs.org/

PhantomJS是一个带有JavaScript API的无头WebKit脚本

您可以编写PhantomJS js脚本而不是selenium脚本(但我认为您更喜欢使用Python env;)