【发布时间】:2018-10-19 06:01:11
【问题描述】:
我正在编写一个 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>
区别在于第三行缺少拉取请求的数量(即在跨度标记中缺少 5)
这些是我想问的问题:
1.为什么没有。抓取的行中缺少拉取请求(在这种情况下为 5 个)?
2.我该如何解决这个问题?那就是得到否。拉取请求成功。
【问题讨论】:
-
该数字可能是由
userPRCount脚本添加的,该脚本在标签的data-js=属性中引用;如果未缩小/混淆,则可以从 json 文件或脚本本身中提取此信息。编辑:确认,如果您在关闭 JS 的情况下访问该页面,则不会显示数据 -
好的,所以我可以在他们的页面加载的脚本中找到对
userPRCount的唯一引用是在 hacktoberfest.digitalocean.com/assets/… 中,或者在访问页面时浏览器加载的任何内容。代码被缩小了。它调用o=document.querySelectorAll('[data-js="userPRCount"]'),这可能就是将数字添加到 html 页面的原因。逆向工程可能需要你一两天的时间。
标签: python web-scraping beautifulsoup html-parsing