【问题标题】:omegle lxml scrape not workingomegle lxml刮不工作
【发布时间】:2014-01-07 17:25:11
【问题描述】:

所以我正在执行一个 omegle 抓取尝试在线抓取用户。

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

【问题讨论】:

  • 我无法从我所在的位置获取源代码,但可能 HTML 代码不是完美的 XML。在这种情况下,lxml 可能无法正确解析树。在这种情况下,BeautifulSoup 来拯救。只是我的两分钱:)

标签: python html xpath lxml


【解决方案1】:

当您使用 requests 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")

【讨论】:

    【解决方案2】:

    你也可以在这个http://front1.omegle.com/status上使用GET方法

    这将以 JSON 形式返回在线用户数和其他详细信息

    【讨论】:

      【解决方案3】:

      我已经做了一些研究,页面的特定部分不是 XML,而是 Javascript。

      这是源代码(这是请求库在您的程序中返回的内容)

              <div id="onlinecount"></div>
              <script>
              if (IS_MOBILE) {
                  $('sharebuttons').dispose();
                  $('onlinecount').dispose();
              }
              </script>
              </div>
      

      如你所见,在 lxml 眼中,onlinecount div 中只有一个脚本。

      【讨论】:

        【解决方案4】:

        我同意普拉文。

        如果你想避免启动可见的浏览器,你可以使用 PhantomJS 它也有一个 selenium 驱动程序

        http://phantomjs.org/

        PhantomJS 是一个可使用 JavaScript API 编写脚本的无头 WebKit

        除了 selenium 脚本,您还可以编写 PhantomJS js 脚本(但我假设您更喜欢留在 Python 环境中;))

        【讨论】:

          猜你喜欢
          • 2016-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 2018-12-07
          • 2010-11-15
          • 2010-09-14
          • 2014-11-01
          相关资源
          最近更新 更多