Commit 83c0705f authored by Kamal Thennakoon's avatar Kamal Thennakoon

add finding fav language feature

parent 37cb3b82
bson==0.5.10
beautifulsoup4==4.9.3
dnspython==2.1.0
lxml==4.6.1
pymongo==3.11.4
regex==2020.7.14
requests==2.24.0
requests-html==0.10.0
scipy==1.5.4
search-engine-parser==0.6.2
youtube-search-python==1.4.6
from bs4 import BeautifulSoup
from lxml import etree
import requests
import re
# we need to get the stack url with the user id
url = 'https://stackoverflow.com/users/351048/joshmaker'
# we need to get the favourite language list from gitHub
git_languages = ['javascript', 'typescript', 'dart', 'java', 'php']
sourceHtml = requests.get(url).text
soup = BeautifulSoup(sourceHtml, 'lxml')
user = soup.find('h2', class_='fs-headline1')
top_tags = []
user_reputation = 0
user_score = 0
if user is None:
print('404')
else:
print(user.text)
# check user reputation
dom = etree.HTML(str(soup))
user_rep_str = dom.xpath('//*[@id="user-card"]/div[1]/div/div[2]/div[1]/div')[0].text
user_rep = re.sub('[^0-9]+', '', user_rep_str)
user_reputation = int(user_rep)
print(user_reputation)
if user_reputation > 15:
url += '?tab=tags&sort=votes'
print(url)
# get all tags
source_user_stats = requests.get(url).text
soup = BeautifulSoup(source_user_stats, 'lxml')
tags_dom = etree.HTML(str(soup))
tags_xpath = tags_dom.xpath('//*[@id="user-tab-tags"]/div[2]/table/tbody/tr[*]/td[*]/a')
for tag in tags_xpath:
print(tag.text)
top_tags.append(tag.text)
else:
print('user is a noob!')
def find_fav_language(tag_list, language_list_git):
if not tag_list and not language_list_git:
print('both null')
elif not tag_list:
print('no tags found')
elif not language_list_git:
print('no lang from git')
else:
for lang in language_list_git:
for tag in tag_list:
print(lang, '::', tag)
if tag == lang:
print('we have got a match', tag)
break
else:
continue
break
find_fav_language(top_tags, ['js', 'dart', 'delphi', 'r', 'php'])
def calculate_user_score():
if user_reputation <= 10:
return 15
elif 10 < user_reputation <= 50:
return 25
elif 50 < user_reputation <= 150:
return 35
elif 150 < user_reputation <= 500:
return 45
elif 500 < user_reputation <= 1000:
return 55
elif 1000 < user_reputation <= 3000:
return 65
elif 3000 < user_reputation <= 8000:
return 75
elif 8000 < user_reputation <= 15000:
return 85
elif 15000 < user_reputation <= 55000:
return 90
elif 55000 < user_reputation <= 100000:
return 95
else:
return 100
print('your score is:', calculate_user_score())
# html_data=soup.prettify()
# scrapped_html = open("stack.html", "w")
# scrapped_html.write(html_data)
# scrapped_html.close()
# cyberMsg = soup.find('p', class_='MuiTypography-colorTextSecondary').text
# print(cyberMsg)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment