よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

Webスクレイピングをコマンドラインでテスト

コマンドプロンプト等ターミナルからurlとタグを引数に与えると、そのページ中のタグを拾い出すPythonスクリプトのテストです。


Pythonモジュールは

  • requests
  • BeautifulSoup4

を使用しています。別途いります。


Pythonスクリプト

#! usr/bin/env python3

import sys
import requests
from bs4 import BeautifulSoup

import sys
import requests
from bs4 import BeautifulSoup

def bsParser(args):
        #print(type(args)) 
        #print(args)
 
        if len(args) > 3:
            print("引数が多いので終了")
            sys.exit()

        elif len(args) == 1:
            print("引数がないので終了")
            sys.exit()

        else:
            url = args[1]

            try:
                resp = requests.get(url)
                if resp.status_code == 200:
                    soup = BeautifulSoup(resp.content,"html.parser")
                    #print(soup)

                    ThisIsThatYouWant = soup.find_all(args[2])

                    print(type(ThisIsThatYouWant))
                    for i in ThisIsThatYouWant :
                        print(i)
                        print("\n")
            except:
                print("URLが無効か繋がってないかアク禁で終了")
                sys.exit() 

bsParser(sys.argv)

【説明】

最初の #! から始まるシバンと呼ばれるものとimport部分は飛ばして……
参考 シバン
Pythonプログラムの先頭行の #! シバン(Shebang)について | ガンマソフト株式会社

関数に引数argsの受け皿が用意されています。ここにスクリプトの一番下に書いているsys.srgvが入ります。システムがつくとコマンドラインで引数を受けられるようになります。
渡されたargsはリスト型です。中にprint(type(args))と書けば確認できます。class 'list'

print(args)は、もしURLとタグを1つずつ正しく渡せば['ファイル名.py', 'https://なんとか.co.jp', 'title']のように3つ入っています。

リストの[0]にファイル名、[1]にURL、[2]にタグ。

3つより多ければ終了。

引数がゼロなら終了。

例えばファイルの移動やファイル名変更のコマンドmvを引数なしで実行すると

mv: missing file operand
Try 'mv --help' for more information.

と言われます。
「mv --help」と入力すれば mv コマンドの使い方が出てくるよと案内。


その他なら合格です。
めでたく次のステップに進みます。


tryの中のif文で、ページの接続状況を試みています。

requests.get()に.status_codeをつけると数字が返ってきます。
ちゃんとネットが繋がって、かつページも読み取り可能で存在するなら数字の200を返され、次のステップ。
requests.get()でゲットしたものを担いで次のBeautifulSoupに渡します。


requests.get()に.contentをつければバイナリ(bytes型)のhtmlソースコードが獲られます。それをBeautifulSoupに渡してhtmlを選り分けしてもらって、変数soupに箱詰め。


箱詰めsoupにargsリストの[2]つまり3番目に入ったタグを見つけるように頼んでいるのがsoup.find_allの所。
ここの所を弄れば、もっと具体的な中身が入手できるようになる。
宝石の原石を磨いて光らせます。


お宝分別する作業を終えるとリスト形式になっています。
そのまま取り出せばカッコに入れられたものが並べられます。
見易いようにfor分で一つ一つ取り出しました。

これでこのプログラムはお仕事終了。

その下のexcept:は、ページの接続状況把握の際に200が返って来なかった場合の処理です。

ネットを切って実行すると確認できます。





【使い方】

  1. URL「https://なんとか」の中にあるリンクのタグ「li」を取り出したいとします。
  2. 上のスクリプトに「ファイル名」をつけて任意のフォルダに保存し、
  3. コマンドプロンプト等から、
  4. 保存したファイルのあるフォルダにカレントディレクトリをcdコマンドで移動後、

python ファイル名 https://なんとか.com li」とスペースを入れて入力

カレントディレクトリ>python ファイル名 https://なんとか.com li

Enterキー。

指定したタグがそのまま出て来ます。

取り出した内容をファイルで保存したければ、上の「li」後ろにスペースを空けて
「> チョメチョメ.txt」を追加すれば同じフォルダにファイル名「チョメチョメ.txt」が出来ます。
✳️詳しくはコマンドの使い方をお調べください。

python ファイル名 https://なんとか.com li > チョメチョメ.txt