Tex, python, illusrator, VPSの学生ノート

latotex-blog

Python

Pythonスクレイピングで論文をまとめてDLできるのか?

投稿日:






レポートを制作するとき、地味にめんどくさいのは引用論文のダウンロードですよね。

今回はそのダウンロードをPythonで自動化できるのか方法を記事にしました。

スポンサーリンク

スクレイピングをする前に、注意してほしいことがあります!!

google scholarのスクレイピングは違法です!

する必要がなければしない方が良いです。実行に利用する環境のIPアドレスからGoogle検索が利用できなくなるリスクがあります。詳細についてはこちらを参照してください。

time.sleep(1.0)で時間を空けてスクレイピングをすること

一定時間なんどもスクレイピングをすると、googleがロボットによる攻撃ではないかと疑われてしまいます。そうなるとpdfをダウンロードすることができなくなりますのでご注意ください。

Pythonコード

#!/usr/bin/env python3

#必要なものを宣言
import re
import requests
from pathlib import Path
from bs4 import BeautifulSoup4

#Pythonファイル場所に新しいディレクトリを追加する
output_folder = Path('article')
output_folder.mkdir(exist_ok=True)

#調べたいURL
url = 'https://scholar.google.co.jp/scholar?....'

#URLをhtmlに変換する
html = requests.get(url).text
time.sleep(1.0)

#BeautifulSoupの初期化
soup = BeautifulSoup(html, "html.parser")

#DLするPDFを指定している「a」タグの場所
#ブラウザの検証ツールから調べます
a_list =soup.select('div.gs_or_ggsm > a')

#「a」タグの中で、PDFのURLを指定している場所を取り出す
for a in a_list:
    pdf_url = a.attrs['href']

    #保存するファイル名を決める
    filename = re.search(".*\/(.*pdf)$",pdf_url)
    #保存フォルダー(output_folder)と結合
    save_path = output_folder.joinpath(filename.group(1))

    try:
        #pdfのURLからデータを取得
         pdf = requests.get(pdf_url)
         time.sleep(1.0)
        #保存するファイルパスにデータを保存
         open(save_path, 'wb').write(pdf.content)
         print(save_path)

    except ValueError:
        #ものによっては、.pdfがつかないものがあるので
        #そのURLをプリントする
        print('ValueError =' pdf_url)

    

スポンサーリンク

参考にしたサイト様

スクレイピング全般
https://hashikake.com/scraping_img
google scholarによる方法
https://qiita.com/kuto/items/9730037c282da45c1d2b

-Python

Copyright© latotex-blog , 2020 All Rights Reserved Powered by STINGER.