网页抓取GitHub用户星时属性错误



我在抓取GitHub用户的星星时出错,任何人都可以帮助我解决这个问题。我用的是python。我的代码

def total_stars(username):
html = requests.get('https://github.com/'+username ).text
soup = BeautifulSoup(html, 'html.parser')
total_commit = soup.select_one('text-bold  color-fg-default + span').text
print(total_commit)

误差

AttributeError: 'NoneType' object has no attribute 'text'

您几乎得到了答案@lex,您想要通过html来获取元素的方式需要放入您的select_one()select()调用中。

像下面,

>>> soup.select_one('#js-pjax-container > div.container-xl.px-3.px-md-4.px-lg-5 > div > div.flex-shrink-0.col-12.col-md-3.mb-4.mb-md-0 > div > div.js-profile-editable-replace > div.d-flex.flex-column > div.js-profile-editable-area.d-flex.flex-column.d-md-block > div.flex-order-1.flex-md-order-none.mt-2.mt-md-0 > div > a:nth-child(3) > span').text

>>> soup.select_one('#js-pjax-container div.container-xl.px-3.px-md-4.px-lg-5 div div.flex-shrink-0.col-12.col-md-3.mb-4.mb-md-0 div div.js-profile-editable-replace div.d-flex.flex-column div.js-profile-editable-area.d-flex.flex-column.d-md-block div.flex-order-1.flex-md-order-none.mt-2.mt-md-0 div a:nth-child(3) span').text

>>> soup.select('#js-pjax-container > div.container-xl.px-3.px-md-4.px-lg-5 > div > div.flex-shrink-0.col-12.col-md-3.mb-4.mb-md-0 > div > div.js-profile-editable-replace > div.d-flex.flex-column > div.js-profile-editable-area.d-flex.flex-column.d-md-block > div.flex-order-1.flex-md-order-none.mt-2.mt-md-0 > div > a:nth-child(3) > span')[0].text

:

'16'

注意:这是基于你的评论。

使用一个不那么敏感的路径,不要使用一个即使是很小的站点/html更改的路径。较长的标识符链很容易断裂。

"stars"号码是在一个链接到一个标签的用户的个人资料(星号repos),如https://github.com/aneroid?tab=stars。你已经有了用户名&url。

因此,将选择器简化为更健壮的东西:
a[href="https://github.com/aneroid?tab=stars"] > span

代码将变成:

def total_stars(username):
url = 'https://github.com/' + username
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
# it's not `total_commit`, that's in your other function ;-)
stars = soup.select_one(f'a[href="{url}?tab=stars"] > span').text
print(stars)
# return int(stars)

顺便说一句,followersfollowing链接有一个类似的结构,所以?tab=followers?tab=following如果你也想要它们。

相关内容

  • 没有找到相关文章

最新更新