added code and ran tests using sntwitter
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"found 0 tweets\n",
|
||||
"found 100 tweets\n",
|
||||
"found 200 tweets\n",
|
||||
"found 300 tweets\n",
|
||||
"found 400 tweets\n",
|
||||
"found 500 tweets\n",
|
||||
"found 600 tweets\n",
|
||||
"found 700 tweets\n",
|
||||
"found 800 tweets\n",
|
||||
"found 900 tweets\n",
|
||||
"found 1000 tweets\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import snscrape.modules.twitter as sntwitter\n",
|
||||
"import pandas as pd\n",
|
||||
"tweet_list = list()\n",
|
||||
"query = '(Odense OR odense OR #odense OR #Odense) until:2022-12-17 since:2017-01-01 -filter:replies'\n",
|
||||
"limit = 1000\n",
|
||||
"\n",
|
||||
"for i, tweet in enumerate(sntwitter.TwitterSearchScraper(query).get_items()):\n",
|
||||
" if i % 100 == 0: print(f'found {i} tweets')\n",
|
||||
" if i > limit: break\n",
|
||||
" tweet_list.append([tweet.date, tweet.id, tweet.content, tweet.user.username])\n",
|
||||
"\n",
|
||||
"df = pd.DataFrame(tweet_list, columns=['Datetime', 'Id', 'Text', 'Username'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>Datetime</th>\n",
|
||||
" <th>Id</th>\n",
|
||||
" <th>Text</th>\n",
|
||||
" <th>Username</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>2022-12-16 22:20:26+00:00</td>\n",
|
||||
" <td>1603877740972752897</td>\n",
|
||||
" <td>Danimarka’nın Odense takımı bu yaz müthiş bir ...</td>\n",
|
||||
" <td>EryilmazFa10</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>2022-12-16 21:56:35+00:00</td>\n",
|
||||
" <td>1603871736579371008</td>\n",
|
||||
" <td>Highlights: SønderjyskE – Odense https://t.co/...</td>\n",
|
||||
" <td>trans_rumor</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>2022-12-16 21:39:40+00:00</td>\n",
|
||||
" <td>1603867481101066241</td>\n",
|
||||
" <td>“Meta Platforms Inc has halted construction of...</td>\n",
|
||||
" <td>sakak</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>2022-12-16 21:19:09+00:00</td>\n",
|
||||
" <td>1603862318647070720</td>\n",
|
||||
" <td>Sponsoreret: Verdensmestre, europamestre og st...</td>\n",
|
||||
" <td>otwndk</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>2022-12-16 21:07:09+00:00</td>\n",
|
||||
" <td>1603859298249019392</td>\n",
|
||||
" <td>Meta just halted a major data centre project t...</td>\n",
|
||||
" <td>techosmo</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>996</th>\n",
|
||||
" <td>2022-11-23 15:42:37+00:00</td>\n",
|
||||
" <td>1595442703990493211</td>\n",
|
||||
" <td>Mohamed Djan Fofana går fra banen, og han erst...</td>\n",
|
||||
" <td>Odense_Boldklub</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>997</th>\n",
|
||||
" <td>2022-11-23 15:34:36+00:00</td>\n",
|
||||
" <td>1595440689629859840</td>\n",
|
||||
" <td>1-1...\\nEfter et hjørnespark passerer bolden t...</td>\n",
|
||||
" <td>Odense_Boldklub</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>998</th>\n",
|
||||
" <td>2022-11-23 15:31:12+00:00</td>\n",
|
||||
" <td>1595439830187798529</td>\n",
|
||||
" <td>Ud er gået Sebastian Wille, Omar Jebali, Law T...</td>\n",
|
||||
" <td>Odense_Boldklub</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>999</th>\n",
|
||||
" <td>2022-11-23 15:21:18+00:00</td>\n",
|
||||
" <td>1595437338997542912</td>\n",
|
||||
" <td>Anden halvleg er netop sparket i gang 🔵⚪\\n#obd...</td>\n",
|
||||
" <td>Odense_Boldklub</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1000</th>\n",
|
||||
" <td>2022-11-23 15:05:57+00:00</td>\n",
|
||||
" <td>1595433476135829506</td>\n",
|
||||
" <td>Efter en scoring af Franco Tongya går vi nu ti...</td>\n",
|
||||
" <td>Odense_Boldklub</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>1001 rows × 4 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" Datetime Id \\\n",
|
||||
"0 2022-12-16 22:20:26+00:00 1603877740972752897 \n",
|
||||
"1 2022-12-16 21:56:35+00:00 1603871736579371008 \n",
|
||||
"2 2022-12-16 21:39:40+00:00 1603867481101066241 \n",
|
||||
"3 2022-12-16 21:19:09+00:00 1603862318647070720 \n",
|
||||
"4 2022-12-16 21:07:09+00:00 1603859298249019392 \n",
|
||||
"... ... ... \n",
|
||||
"996 2022-11-23 15:42:37+00:00 1595442703990493211 \n",
|
||||
"997 2022-11-23 15:34:36+00:00 1595440689629859840 \n",
|
||||
"998 2022-11-23 15:31:12+00:00 1595439830187798529 \n",
|
||||
"999 2022-11-23 15:21:18+00:00 1595437338997542912 \n",
|
||||
"1000 2022-11-23 15:05:57+00:00 1595433476135829506 \n",
|
||||
"\n",
|
||||
" Text Username \n",
|
||||
"0 Danimarka’nın Odense takımı bu yaz müthiş bir ... EryilmazFa10 \n",
|
||||
"1 Highlights: SønderjyskE – Odense https://t.co/... trans_rumor \n",
|
||||
"2 “Meta Platforms Inc has halted construction of... sakak \n",
|
||||
"3 Sponsoreret: Verdensmestre, europamestre og st... otwndk \n",
|
||||
"4 Meta just halted a major data centre project t... techosmo \n",
|
||||
"... ... ... \n",
|
||||
"996 Mohamed Djan Fofana går fra banen, og han erst... Odense_Boldklub \n",
|
||||
"997 1-1...\\nEfter et hjørnespark passerer bolden t... Odense_Boldklub \n",
|
||||
"998 Ud er gået Sebastian Wille, Omar Jebali, Law T... Odense_Boldklub \n",
|
||||
"999 Anden halvleg er netop sparket i gang 🔵⚪\\n#obd... Odense_Boldklub \n",
|
||||
"1000 Efter en scoring af Franco Tongya går vi nu ti... Odense_Boldklub \n",
|
||||
"\n",
|
||||
"[1001 rows x 4 columns]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "venv",
|
||||
"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.10.6"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "1d532f3642617da00cbdbdc5ef98bd8d4ca226c95ac593ade79d8cbc880a2afe"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import snscrape.modules.twitter as sntwitter
|
||||
import pandas as pd
|
||||
|
||||
def scrape(limit=0):
|
||||
# prepare variables
|
||||
tweet_list = list()
|
||||
query = '(Odense OR odense OR #odense OR #Odense) until:2022-12-17 since:2017-01-01 -filter:replies'
|
||||
# begin scraping
|
||||
for i, tweet in enumerate(sntwitter.TwitterSearchScraper(query).get_items()):
|
||||
# if limit is reached, break out of loop
|
||||
if limit > 0 and i > limit: break
|
||||
# if another 100 tweets found, tell it
|
||||
if i % 100 == 0:
|
||||
print(f'found {i} tweets')
|
||||
tweet_list.append([tweet.date, tweet.id, tweet.content, tweet.user.username])
|
||||
# create dataframe
|
||||
df = pd.DataFrame(tweet_list, columns=['Datetime', 'Id', 'Text', 'Username'])
|
||||
return df
|
||||
Reference in New Issue
Block a user