{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"\n# <center>Web Scrapping</center>\n\n<center>\n    <figure>\n        <a href=\"https://www.preprints.org\"><img src=\"data:image/png;base64,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\" alt =\"Sentiment Analysis\" style='width:30%;'></a>\n    </figure>\n    \n</center>\n\n\n***\n\n\n\n<center>\n\n    \n<figure>\n        <img src=\"data:image/png;base64,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\" alt =\"Sentiment Analysis\" style='width:10%;'>\n    </figure>    \n    \n</center>","metadata":{}},{"cell_type":"markdown","source":"This notebook demonstrates techniques of web scpaping and basic EDA.\n\n<b>Features of this notebook</b>:\n- Web Scrapping with BeautifulSoup;\n- Use cache of downloaded web pages;\n- Some measures against blocking as a bot;\n- Basic EDA.\n\n# Table of contents\n<div style='border-width: 2px;\n              border-bottom-width:4px;\n              border-bottom-color:#00FF00;\n              border-bottom-style: solid;'></div>\n\n\n- [1 | Scrap the Web](#1)\n\n- [2 | Basic EDA](#2)\n\n- [3 | Conclusion](#3)\n\n\n\n\n<a id='1'></a>\n# 1 | Scrap the Web\n<div style='border-width: 2px;\n              border-bottom-width:4px;\n              border-bottom-color:#00FF00;\n              border-bottom-style: solid;'></div>\n\n\"Ethics of web scraping: It's important to note that web scraping can be unethical if it's used to collect private or sensitive data without the owner's consent. Always check the website's terms of use and privacy policy before scraping.\" [How to Get Started with Web Scraping: Tips and Tools for Beginners](https://www.kaggle.com/discussions/getting-started/414210)\n\nWebsite: [Preprints.org](https://www.preprints.org).","metadata":{}},{"cell_type":"code","source":"#import necessary libraries\n\nimport numpy as np\nimport pandas as pd\nfrom bs4 import BeautifulSoup\nimport requests\nfrom datetime import date\nimport time\nimport random\nimport matplotlib.pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:27:42.066785Z","iopub.execute_input":"2023-06-03T06:27:42.067346Z","iopub.status.idle":"2023-06-03T06:27:42.306646Z","shell.execute_reply.started":"2023-06-03T06:27:42.067316Z","shell.execute_reply":"2023-06-03T06:27:42.305784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# URL to scrap pageы with list of papers\nurl = 'https://www.preprints.org/subject/browse/all?page_num='","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:27:42.307984Z","iopub.execute_input":"2023-06-03T06:27:42.308700Z","iopub.status.idle":"2023-06-03T06:27:42.313681Z","shell.execute_reply.started":"2023-06-03T06:27:42.308657Z","shell.execute_reply":"2023-06-03T06:27:42.312650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Use cache to store loaded pages locally (very useful for debugging)\n# Debugging may be required in case of changes in web page structure\n\n# Cache dataset can be created\n# cache_df = pd.DataFrame({\n#        'page':[],\n#        'soup':[]\n#    })\n\n# Lets load the cache from file instead loading them\n# If you need a fresh data, create an empty cache dataset before the parcing\ncache_df = pd.read_csv('/kaggle/working/preprint_cache.csv')\n\ncache_df","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:27:42.315129Z","iopub.execute_input":"2023-06-03T06:27:42.315413Z","iopub.status.idle":"2023-06-03T06:27:48.928114Z","shell.execute_reply.started":"2023-06-03T06:27:42.315388Z","shell.execute_reply":"2023-06-03T06:27:48.926806Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Parse the page n and put rows into papers_df dataset\n\ndef parse_page(n):\n\n    soup = None\n\n    if(len(cache_df[cache_df['page'] == n]) > 0):\n        soup = cache_df[cache_df['page'] == n]['soup'].iloc[0]\n        soup = BeautifulSoup(soup,\"lxml\")\n    else:\n        # Delay before next request to prevent possible blocking as a bot\n        time.sleep(random.randint(500, 1000) / 200.0)\n\n        # Some stuff against possible blocking as a bot\n        # Taken from: https://stackoverflow.com/questions/43440397/requests-using-beautiful-soup-gets-blocked\n        headers = requests.utils.default_headers()\n        headers.update({'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'})\n        link = requests.get(url + str(n), headers = headers)\n        soup = BeautifulSoup(link.content,\"lxml\")\n        cache_df.loc[len(cache_df.index)] = np.array([n, soup], dtype = object)\n\n    # Start parsing\n    \n    # If number of pages is udefined, determine it\n    global url_pages_total \n    \n    if(url_pages_total == 100000000):\n        ultag = soup.find('ul', {'class':'pagination'})\n        uls = ultag.find_all('li')\n        url_pages_total = int(uls[4].string)\n\n\n    # Parse next elements\n    notes = soup.find_all('div', {'class':'search-content-box margin-serach-wrapper-left'})\n\n    i = 0\n    for note in notes:\n\n        # Determine DOI\n        doi = None # DOI may be missing\n\n        doitag = note.find('span', {'class': 'content-box-header-element-5'})\n\n        if doitag is not None:\n            doitag = doitag.find('a')\n            doi = doitag.string.strip()[4:]\n\n        divs = note.find_all('div')\n\n        atag = divs[2].find('a', href = True)\n\n        title = atag.contents[0]\n\n        # For full reference uncomment first line and comment second one line\n        # href = 'https://www.preprints.org' + atag['href']\n        href = atag['href']        \n\n        abstract = note.find('div', {'class': 'abstract-content'}).contents\n        abstract = repr(abstract)\n\n        spans = note.find_all('span', {'class': 'search-content-header-label'})\n\n        authors = []\n        subject = []\n        keywords = []\n\n        authors_flag = False\n        subject_flag = False\n        keywords_flag = False\n\n        sktags = note.find_all('a')\n        for sktag in sktags:\n\n            authors_flag = (sktag.has_attr('class')) and (sktag['class'][0] == 'author-selector')\n            # subject_flag = (sktag.has_attr('href')) and ('/search?search_subject_area' in sktag['href'])\n            subject_flag = (sktag.has_attr('href')) and ('/search' in sktag['href'])\n            keywords_flag = (sktag.has_attr('href')) and ('keywords' in sktag['href']) and (not ('mailto' in sktag['href']))\n\n            if (authors_flag):\n                authors.append(sktag.string.strip())\n                continue\n\n            if (keywords_flag):\n                ss = sktag.string\n                if (ss is not None):\n                    keywords.append(ss.strip())\n                continue            \n            \n            if (subject_flag):\n                sbcts = sktag.string.strip().split(',')\n                for sbct in sbcts:\n                    subject.append(sbct.strip())\n                continue\n                \n            continue # Just flag completion of the loop (for sktag in sktags)\n\n        ss1 = repr(spans)\n        ind1 = ss1.find('Online:')\n        if (ind1 >= 0):\n            ss2 = ss1[ind1 + 8:]\n            ind2 = ss2.find('</span>')\n            \n        online = ss2[:ind2]\n        \n        # Append to dataframe\n        papers_df.loc[len(papers_df.index)] = np.array([\n        doi,\n        title,\n        authors,\n        subject,\n        keywords,\n        online,\n        href,\n        abstract\n        ], dtype = object)\n        \n    return # The end of routine (def parse_page(n))","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:27:07.132098Z","iopub.execute_input":"2023-06-03T09:27:07.132508Z","iopub.status.idle":"2023-06-03T09:27:07.155858Z","shell.execute_reply.started":"2023-06-03T09:27:07.132478Z","shell.execute_reply":"2023-06-03T09:27:07.154590Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Parce the pages\n# Notes: New insertion can occur during the scrapping. Copies of rows are possible.\n\n# Total number of pages\n# Will be corrected as soon as the 1st page will be scrapped\nurl_pages_total = 100000000\n\n# Create a Dataset for the papers\npapers_df = pd.DataFrame({\n        'doi':[],\n        'title':[],\n        'authors':[],\n        'subject':[],\n        'keywords':[],\n        'online':[],\n        'href':[],\n        'abstract':[]\n    })\n\n\n# Set url to None to be sure the code will not request the Internet (silence mode)\n# Comment this line to download fresh data\nurl = None\n\n# Start from the page 1\nn = 1\n\nwhile (True):\n    parse_page(n)\n    print ('Page:', n, 'of', url_pages_total, 'parsed', end=\"\\r\")\n    n += 1\n    if (n > url_pages_total):\n        break\n\n# Take a look at the papers\npapers_df","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:27:17.440277Z","iopub.execute_input":"2023-06-03T09:27:17.440701Z","iopub.status.idle":"2023-06-03T09:36:29.890679Z","shell.execute_reply.started":"2023-06-03T09:27:17.440668Z","shell.execute_reply":"2023-06-03T09:36:29.889564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Save the cache if need\n# cache_df.to_csv('/kaggle/working/preprint_cache.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:36:45.364219Z","iopub.execute_input":"2023-06-03T06:36:45.364490Z","iopub.status.idle":"2023-06-03T06:36:45.369024Z","shell.execute_reply.started":"2023-06-03T06:36:45.364467Z","shell.execute_reply":"2023-06-03T06:36:45.368251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='2'></a>\n# 2 | Basic EDA\n<div style='border-width: 2px;\n              border-bottom-width:4px;\n              border-bottom-color:#00FF00;\n              border-bottom-style: solid;'></div>","metadata":{}},{"cell_type":"code","source":"# Get a basic info (some doi absent)\npapers_df.info()","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:37:50.636622Z","iopub.execute_input":"2023-06-03T09:37:50.637862Z","iopub.status.idle":"2023-06-03T09:37:50.774778Z","shell.execute_reply.started":"2023-06-03T09:37:50.637819Z","shell.execute_reply":"2023-06-03T09:37:50.773627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Number of papers without doi\nlen(papers_df[pd.isnull(papers_df.doi)])","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:37:54.968436Z","iopub.execute_input":"2023-06-03T09:37:54.968845Z","iopub.status.idle":"2023-06-03T09:37:54.983684Z","shell.execute_reply.started":"2023-06-03T09:37:54.968812Z","shell.execute_reply":"2023-06-03T09:37:54.982959Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Separate publication year into pubyear column\ndef get_year(dtstr):\n    strs = dtstr.split(' ')\n    return int(strs[2]) \n\npapers_df['pubyear'] = papers_df['online'].apply(lambda x: get_year(x))\npapers_df['pubyear']","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:37:58.067918Z","iopub.execute_input":"2023-06-03T09:37:58.068848Z","iopub.status.idle":"2023-06-03T09:37:58.144698Z","shell.execute_reply.started":"2023-06-03T09:37:58.068803Z","shell.execute_reply":"2023-06-03T09:37:58.143622Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Number of publications per year\nvc = papers_df.pubyear.value_counts()\nplt.figure(figsize = (12,4))\nplt.bar(vc.index, vc.values)\nplt.title(\"Publications per year\")","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:38:00.732694Z","iopub.execute_input":"2023-06-03T09:38:00.733180Z","iopub.status.idle":"2023-06-03T09:38:01.066632Z","shell.execute_reply.started":"2023-06-03T09:38:00.733148Z","shell.execute_reply":"2023-06-03T09:38:01.064312Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Collect Subject and Keywords for periods before 2021 and 2021 and later\nsubjects1 = set()\nsubjects2 = set()\nkeywords1 = set()\nkeywords2 = set()\n\nfor index, row in papers_df.iterrows():\n    kwds = row['keywords']\n    sbjcts = row['subject']\n    if(row['pubyear'] < 2021):\n        for sb in sbjcts:\n            subjects1.add(sb)\n        for kw in kwds:\n            keywords1.add(kw)\n    else:\n        for sb in sbjcts:\n            subjects2.add(sb)\n        for kw in kwds:\n            keywords2.add(kw)\n\n# Length of Subject and Keywords sets\nprint(len(subjects1))\nprint(len(subjects2))\nprint(len(keywords1))\nprint(len(keywords2))","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:38:06.459532Z","iopub.execute_input":"2023-06-03T09:38:06.459948Z","iopub.status.idle":"2023-06-03T09:38:09.529443Z","shell.execute_reply.started":"2023-06-03T09:38:06.459915Z","shell.execute_reply":"2023-06-03T09:38:09.528179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# New subjects (meems not related to AI)\nsubjects2 - subjects1","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:38:14.637559Z","iopub.execute_input":"2023-06-03T09:38:14.638015Z","iopub.status.idle":"2023-06-03T09:38:14.645568Z","shell.execute_reply.started":"2023-06-03T09:38:14.637978Z","shell.execute_reply":"2023-06-03T09:38:14.644194Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# New keywords\n# The list is too large to view, thut the next line is commented\n# keywords2 - keywords1\n\n# Number of new keywords\nlen(keywords2 - keywords1)","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:38:17.016497Z","iopub.execute_input":"2023-06-03T09:38:17.017288Z","iopub.status.idle":"2023-06-03T09:38:17.034361Z","shell.execute_reply.started":"2023-06-03T09:38:17.017247Z","shell.execute_reply":"2023-06-03T09:38:17.033254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get number of papers with keyword in abstract\n# For period before 2021 and 2021 and later\ndef get_pn_for_keyword(kw):\n    i1 = 0\n    i2 = 0\n    kwl = kw.lower()\n\n    for index, row in papers_df.iterrows():\n        abstr = repr(row['abstract']).lower()\n        if (kwl in abstr):\n            if(row['pubyear'] < 2021):\n                i1 += 1\n            else:\n                i2 += 1\n    return [i1, i2, i2 - i1]","metadata":{"execution":{"iopub.status.busy":"2023-06-03T09:54:20.020420Z","iopub.execute_input":"2023-06-03T09:54:20.020857Z","iopub.status.idle":"2023-06-03T09:54:20.028086Z","shell.execute_reply.started":"2023-06-03T09:54:20.020826Z","shell.execute_reply":"2023-06-03T09:54:20.026995Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Analyses how many papers were published for each keyword\n\nAIKeywords = [\n    'Artificial intelligence',\n    'Big data',\n    'Chatbot',\n    'ChatGPT',\n    'Cognitive computing',\n    'Computer vision',\n    'Computational learning theory',\n    'Data mining',\n    'Data science',\n    'Deep learning',\n    'Machine intelligence',\n    'Machine learning',\n    'Machine translation',\n    'Artificial neutral network',\n    'Natural language generation',\n    'Natural language processing',\n    'Natural language understanding',\n    'Overfitting',\n    'Underfitting',\n    'Pattern recognition',\n    'Predictive analytics',\n    'Python',\n    'Reinforcement learning',\n    'Supervised learning',\n    'Unsupervised learning',\n    'Semantic annotation',\n    'Turing test'\n]\n\n# Create dataset for store results\npapers_by_kw = pd.DataFrame({'keyword':[], 'before2021':[],'2021andlater':[]})                                     \n\nn = 1\n\nfor kw in AIKeywords:\n    pps = get_pn_for_keyword(kw)\n    \n    papers_by_kw.loc[len(papers_by_kw.index)] = np.array([\n        kw,\n        pps[0],\n        pps[1]\n        ], dtype = object)\n    \n    print ('Keyword:', n, 'of', len(AIKeywords), 'processed', end=\"\\r\")\n    n += 1\n\npapers_by_kw","metadata":{"execution":{"iopub.status.busy":"2023-06-03T10:32:58.112845Z","iopub.execute_input":"2023-06-03T10:32:58.113931Z","iopub.status.idle":"2023-06-03T10:34:22.968634Z","shell.execute_reply.started":"2023-06-03T10:32:58.113888Z","shell.execute_reply":"2023-06-03T10:34:22.967816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# See published papers as a bar chart\n\nplt.figure(figsize = (12,4))\ndf = pd.DataFrame(\n    {\n        'before 2021':list(papers_by_kw['before2021']),\n        '2021 and after':list(papers_by_kw['2021andlater'])\n    },\n    index = AIKeywords)\n\nax = df.plot.barh()\nplt.ylabel('Keyword')\nplt.xlabel('Papers Published')\nplt.title('AI Related Papers')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-06-03T10:37:45.472679Z","iopub.execute_input":"2023-06-03T10:37:45.473674Z","iopub.status.idle":"2023-06-03T10:37:46.052699Z","shell.execute_reply.started":"2023-06-03T10:37:45.473635Z","shell.execute_reply":"2023-06-03T10:37:46.051667Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='3'></a>\n# 3 | Conclusion\n<div style='border-width: 2px;\n              border-bottom-width:4px;\n              border-bottom-color:#00FF00;\n              border-bottom-style: solid;'></div>\n\n\n\n\nThis notebook demonstrated a simple web scrapping of articles that can be used in further analyses by different deep methods.\n\n\nEDA shows a generally significant increase of AI related papers for 2021 and later in comparison with early published ones.\n\n\n<b>Acknowledement</b>: Creating of this notebook was inspired by the [How To Start Learning Web Scraping From Basic] (https://www.kaggle.com/discussions/getting-started/413850) post.\n\n","metadata":{}}]}