main.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4. def get_normalise_str(string): # нормализация данных
  5. result = string.split(' ')
  6. return result
  7. def write_csv(data): # конвертация данных в csv
  8. # 'a' - it appends a data in file
  9. with open('cmc.csv', 'a', newline='', encoding='utf-8') as file_csv:
  10. writer_file = csv.writer(file_csv)
  11. writer_file.writerow([
  12. data['num'],
  13. data['tik'],
  14. data['name'],
  15. data['url'],
  16. data['cap'],
  17. data['price'],
  18. data['vol'],
  19. data['chg']
  20. ])
  21. def get_html(url): # получение dom-html
  22. res = requests.get(url)
  23. return res.text
  24. def get_page_data(html): # получение данных из html
  25. soup = BeautifulSoup(html, 'lxml') # на вход html и название парсера
  26. trs = soup.find_all('tr', class_='cmc-table-row') # получение строк
  27. for tr in trs: # получение столбцов
  28. tds = tr.find_all('td')
  29. num = tds[0].find('div').text
  30. name = tds[1].find('div').find('a').text
  31. link = tds[1].find('div').find('a').get('href')
  32. cap = tds[2].find('p').text
  33. price = tds[3].find('a').text
  34. volume = tds[4].find('a').text
  35. tiker = tds[5].find('div').text
  36. change = tds[6].find('div').text
  37. data = {
  38. 'num': num,
  39. 'tik': get_normalise_str(tiker)[1],
  40. 'name': name,
  41. 'url': 'https://coinmarketcap.com'+link,
  42. 'cap': cap,
  43. 'price': price,
  44. 'vol': volume,
  45. 'chg': change
  46. }
  47. write_csv(data)
  48. # print(data)
  49. def main():
  50. url = 'https://coinmarketcap.com/'
  51. html = get_html(url)
  52. get_page_data(html)
  53. if __name__ == '__main__':
  54. main()