使用BeautifulSoup抓取网站后缺少文本

时间:2018-10-19 06:01:11

标签: python web-scraping beautifulsoup html-parsing

我正在编写一个python脚本,以获取特定用户在正在进行的hactoberfest事件期间生成的拉取请求的数量。 这是hacktoberfest官方网站的链接。
这是我的代码:

url= 'https://hacktoberfest.digitalocean.com/stats/user'
import urllib.request
from bs4 import BeautifulSoup
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urllib.request.urlopen(req).read()
soup = BeautifulSoup(html, 'html.parser')
name_box = soup.find('div', attrs={'class': 'userstats--progress'})
print(name_box)

应将代码第一行中的“用户”替换为用户的github句柄(例如BAJUKA)。

以下是我要抓取的HTML标签:

<div class="userstats--progress">
        <p>
          Progress (<span data-js="userPRCount">5</span>/5)
        </p>
          <div class="ProgressBar ProgressBar--three u-mb--regular ProgressBar--full" data-js="progressBar"></div>
      </div>

这是我运行代码后得到的:

<div class="userstats--progress">
<p>
          Progress (<span data-js="userPRCount"></span>/5)
        </p>
<div class="ProgressBar ProgressBar--three u-mb--regular" data-js="progressBar"></div>
</div>

区别在于第三行中缺少拉取请求的数量(即,在span标签中缺少5)
这些是我想问的问题:
1.为什么没有刮除的行中缺少拉取请求(在这种情况下为5)?
2.如何解决这个问题?那是没有。的拉取请求成功。

1 个答案:

答案 0 :(得分:0)

您要查找的数据不在hacktober服务器发送的原始数据中,Beautiful Soup下载并解析;加载原始数据后,它会通过浏览器在该页面上运行的Javascript代码插入HTML。

如果您使用此shell命令下载实际用作页面的数据,则会看到您正在查看的span标签开始为空:

curl -s 'https://hacktoberfest.digitalocean.com/stats/BAJUKA' | grep -3 Progress

填充该标签的javascript是什么?好吧,它已缩小,因此很难清除正在发生的事情。您可以在原始数据的最底部找到它,网址为:

curl -s 'https://hacktoberfest.digitalocean.com/stats/BAJUKA' | grep -3 "script src=" | tail -n5

运行时输出以下内容:

<script src="https://go.digitalocean.com/js/forms2/js/forms2.min.js"></script>
<script src="/assets/application-134859a20456d7d32be9ea1bc32779e87cad0963355b5372df99a0cff784b7f0.js"></script>
     

那个看起来很疯狂的源URL是Javascript的缩小版,这意味着它已经被自动缩小,这也意味着它几乎不可读。但是,如果您转到that page.,并从右下角翻页,则会看到一些乱码的Javascript,可以尝试对其进行解码。

我注意到了这一点:

var d="2018-09-30T10%3A00%3A00%2B00%3A00",f="2018-11-01T12%3A00%3A00%2B00%3A00";$.getJSON("https://api.github.com/search/issues?q=-label:invalid+created:"+d+".."+f+"+type:pr+is:public+author:"+t+"&per_page=300"

我认为这是在哪里获取数据以填充DIV的。如果您加载并解析那个 URL,我认为您会找到所需的数据。您需要填写该搜索的日期和作者。祝你好运!