196 lines
4.7 KiB
Plaintext
196 lines
4.7 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Data Scraping for Binance Announcements\n",
|
|
"Beta version. Modified on 07-09-2019"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Import all the needed packages:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import bs4 as bs\n",
|
|
"import urllib.request\n",
|
|
"import tweepy, os, time"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Twitter app"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"consumer_key = os.environ.get('TW_CONSUMER_KEY')\n",
|
|
"consumer_secret = os.environ.get('TW_CONSUMER_SECRET')\n",
|
|
"access_token = os.environ.get('TW_ACCESS_TOKEN')\n",
|
|
"access_token_secret = os.environ.get('TW_ACCESS_TOKEN_SECRET')\n",
|
|
"# authentication of consumer key and secret\n",
|
|
"auth = tweepy.OAuthHandler(consumer_key, consumer_secret)\n",
|
|
"# authentication of access token and secret\n",
|
|
"auth.set_access_token(access_token, access_token_secret)\n",
|
|
"api = tweepy.API(auth)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Create two empty lists for storing news urls. Message should be sent when there is a new item in the news_urls that wasn't in the old_urls"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"old_urls, news_urls = [], []"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Create a bag of key words for getting matches. Don't use plurals, otherwise will get duplicates"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"key_words = ['List', 'list', 'Token Sale', 'Open Trading', 'open trading']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Create the function to extract the information from the webpage and get the matchings"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def extract_binance(main_webpage, key_words):\n",
|
|
" final_item, final_list = [], []\n",
|
|
" sauce = urllib.request.urlopen(main_webpage).read()\n",
|
|
" soup = bs.BeautifulSoup(sauce, 'lxml')\n",
|
|
" list = soup.find_all('li', class_ = 'article-list-item')\n",
|
|
" for article in list:\n",
|
|
" article_text = article.get_text().replace('\\n', '')\n",
|
|
" for item in key_words:\n",
|
|
" if item in article_text:\n",
|
|
" final_item.append(article_text)\n",
|
|
" final_item.append('https://www.binance.com' + article.find('a').get('href'))\n",
|
|
" final_list.append(final_item)\n",
|
|
" final_item = [] # Reset once is in the final_list to not get duplicates\n",
|
|
" return final_list"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Get the first pass"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"CPU times: user 30.9 ms, sys: 349 µs, total: 31.2 ms\n",
|
|
"Wall time: 77.1 ms\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"main_webpage = 'https://www.binance.com/en/support/categories/115000056351'\n",
|
|
"old_urls = extract_binance(main_webpage, key_words)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Loop pass and get the new announcements"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Done for now. Time to go to sleep mate!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Loop pass - Watchdog mode\n",
|
|
"while True:\n",
|
|
" new_urls = extract_binance(main_webpage, key_words)\n",
|
|
" for item in new_urls:\n",
|
|
" if item not in old_urls:\n",
|
|
" msg = item[0] + '\\n' + item[1]\n",
|
|
" api.update_status(msg)\n",
|
|
" print('Done for now. Time to go to sleep mate!')\n",
|
|
" time.sleep(900) # Check every 15 min"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.7.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|