Python beautiful soup4- find_all返回" []"

时间:2017-07-08 07:31:21

标签: python web-scraping beautifulsoup

我正在使用python BS4来抓取https://skinup.gg网站。我试图从网站上按顺序获得乘数类。

我试图通过从div历史课中获取所有数据来获取信息。然而,它只返回[],我很难理解如何获得乘数。

我想知道是否因为 div标签类值不断变化。这引出了我的第二个问题:他们如何在html标签中拥有动态值?是通过Javascript完成的吗?

请原谅我的语法。

这是我的代码:

import urllib.request
import requests
from bs4 import BeautifulSoup
import urllib

page = requests.g et("https://skinup.gg/"
soup = BeautifulSoup(page.content, "html.parser")


print(soup.find_all('div', attrs={'class': 'win'}))

相关网站代码:

<div class="history"><div class="win" style="">
  <time class="date">23:05</time>
  <span class="multiplier">2.19</span>
</div><div class="win" style="">
  <time class="date">23:04</time>
  <span class="multiplier">2.62</span>
</div><div class="lose" style="">
  <time class="date">23:04</time>
  <span class="multiplier">1.75</span>
</div><div class="lose" style="">
  <time class="date">23:04</time>
  <span class="multiplier">1.00</span>
</div><div class="lose" style="">
  <time class="date">23:04</time>
  <span class="multiplier">1.21</span>
</div><div style="">
  <time class="date">23:03</time>
  <span class="multiplier">1.82</span>
</div><div class="lose" style="">
  <time class="date">23:03</time>
  <span class="multiplier">1.00</span>
</div><div class="win" style="">
  <time class="date">23:03</time>
  <span class="multiplier">2.91</span>
</div><div class="lose" style="">
  <time class="date">23:02</time>
  <span class="multiplier">1.01</span>
</div><div class="win" style="">
  <time class="date">23:02</time>
  <span class="multiplier">1184.44</span>
</div><div class="win" style="">
  <time class="date">23:01</time>
  <span class="multiplier">36.81</span>
</div><div class="lose" style="">
  <time class="date">22:59</time>
  <span class="multiplier">1.38</span>
</div><div class="win" style="">
  <time class="date">22:59</time>
  <span class="multiplier">2.42</span>
</div><div class="win" style="">
  <time class="date">22:59</time>
  <span class="multiplier">8.00</span>
</div><div class="win" style="">
  <time class="date">22:58</time>
  <span class="multiplier">3.42</span>
</div><div class="win" style="">
  <time class="date">22:57</time>
  <span class="multiplier">2.04</span>
</div><div class="lose" style="">
  <time class="date">22:57</time>
  <span class="multiplier">1.17</span>
</div><div class="lose" style="">
  <time class="date">22:57</time>
  <span class="multiplier">1.24</span>
</div><div class="lose" style="">
  <time class="date">22:57</time>
  <span class="multiplier">1.11</span>
</div><div class="lose" style="">
  <time class="date">22:56</time>
  <span class="multiplier">1.53</span>
</div>

                </div>

3 个答案:

答案 0 :(得分:2)

首先,这应该会引发语法错误:

page = requests.g et("https://skinup.gg/"

将其更改为:

page = requests.get("https://skinup.gg/")

我建议使用lxml而不是html.parser,它更快更轻。

现在,回答你的问题,

具有win作为类属性的div段位于具有历史类属性的div段下。所以首先搜索历史,然后在获得的列表中搜索<​​em> win 。

但是,当我运行你的脚本并交叉检查你链接的网站的页面源时,没有带有win class属性的div段。

你能提一下,从哪里获得相关网站代码

答案 1 :(得分:1)

对于相关网站,您需要使用selenium来获取所需的数据。

答案 2 :(得分:1)

正如t.m.adam所提到的,urllib或者请求无法获取动态页面源 但是当您看到与chrome开发人员工具链接的页面时,您可以看到在round.multiplier> 2时生成div win类。
这些是由使用wss协议的'socketcluster /'接收的。
所以你应该使用python wss模块来实现你的目标。