pubmedからスクレイピングしたデータをcsv形式で保存する

#はじめに
初投稿です。
今回はpubmedで検索してきたデータをcsvとして保存するコードを書きました。
seleniumのchrome driverを使っています。
#環境設定
seleniumのchrome driverを使用するにはPATHを設定する必要があります。
環境設定の方法は省略します。

環境設定で参考にしたサイト
[Python + Selenium で Chrome の自動操作を一通り](https://qiita.com/memakura/items/20a02161fa7e18d8a693)

#ライブラリ
```python

import time
from selenium import webdriver
import chromedriver_binary
import pandas as pd
```
#Chrome Driverを動かす
任意のキーワードに対して、検索を行います。
find_element_by_idでページ数を取得して、
そのページ数分の情報をスクレイピングしています。
ページ数が1ページの場合、pagenoが存在しなくてエラーが出るので、
try exceptを使っています。

```python

def get_pubmed_info(keyword):
    driver = webdriver.Chrome()
    url = "https://www.ncbi.nlm.nih.gov/pubmed/?term="+keyword.replace(' ','+')
    driver.get(url) 
    driver.implicitly_wait = 1
    data = []
    try:
        page_num = int(driver.find_element_by_id('pageno').get_attribute('last'))
    except:
        page_num = 1
    for i in range(page_num):
        driver.find_element_by_name('Display').click()
        [tag for tag in driver.find_elements_by_tag_name('input')
            if (tag.get_attribute('value') == 'abstract')][1].click()
        source = driver.page_source.split('\n\n\n')
        for paper in source:
            block = paper.split('\n\n')
            if(len(block) >= 6):
                data.append(block)
        driver.back()
        time.sleep(1)
        if (i < page_num - 1):
            driver.find_element_by_css_selector('a.active.page_link.next').click()
            print(i)
            time.sleep(1)
    return data
```

#CSVとして出力
pandasのto_csvを使って出力しています。
保存先のPATHは適当に設定してください。

```python

def get_dataframe(data, keyword):
    csv_data = pd.concat([
        pd.DataFrame([data[i][1] for i in range(len(data))], columns=["title"]),
        pd.DataFrame([data[i][2] for i in range(len(data))], columns=["authors"]),
        pd.DataFrame([data[i][4] for i in range(len(data))], columns=["abstract"])],
        axis=1)
    keyword = keyword.replace(" ", "_")
    csv_data.to_csv(f"../desktop/{keyword}.csv")
```

#全コード
```python

import time
from selenium import webdriver
import chromedriver_binary
import pandas as pd

def main():
    keyword = "yamanaka shinya"
    data = get_pubmed_info(keyword)
    get_dataframe(data, keyword)

def get_pubmed_info(keyword):
    driver = webdriver.Chrome()
    url = "https://www.ncbi.nlm.nih.gov/pubmed/?term="+keyword.replace(' ','+')
    driver.get(url) 
    driver.implicitly_wait = 1
    data = []
    try:
        page_num = int(driver.find_element_by_id('pageno').get_attribute('last'))
    except:
        page_num = 1
    for i in range(page_num):
        driver.find_element_by_name('Display').click()
        [tag for tag in driver.find_elements_by_tag_name('input')
            if (tag.get_attribute('value') == 'abstract')][1].click()
        source = driver.page_source.split('\n\n\n')
        for paper in source:
            block = paper.split('\n\n')
            if(len(block) >= 6):
                data.append(block)
        driver.back()
        time.sleep(1)
        if (i < page_num - 1):
            driver.find_element_by_css_selector('a.active.page_link.next').click()
            print(i)
            time.sleep(1)
    return data

def get_dataframe(data, keyword):
    csv_data = pd.concat([
        pd.DataFrame([data[i][1] for i in range(len(data))], columns=["title"]),
        pd.DataFrame([data[i][2] for i in range(len(data))], columns=["authors"]),
        pd.DataFrame([data[i][4] for i in range(len(data))], columns=["abstract"])],
        axis=1)
    keyword = keyword.replace(" ", "_")
    csv_data.to_csv(f"../desktop/{keyword}.csv")    
```