開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、11章(Webスクレイピング)、11.5(Google検索)のコードを修正して動くようにしたプログラムに、コマンドライン引数でサイト数を指定できる機能を追加してみた。
コード
Python 3
#!/usr/bin/env python3
import sys
import webbrowser
import requests
import bs4
from typing import List
def get_bequatifulsoup(url: str) -> bs4.BeautifulSoup:
res = requests.get(url)
res.raise_for_status()
return bs4.BeautifulSoup(res.text, 'lxml')
def get_links_google(keyword: str, n: int) -> List[str]:
soup = get_bequatifulsoup(f'https://google.com/search?q={keyword}')
links = soup.select('a')
i: int = 0
result: List[str] = []
for link in links:
href = link.get('href')
if href.startswith('/url?q='):
result.append(f'https://google.com{href}')
i += 1
if i == n:
break
return result
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--number', help="how many",
type=int, choices=range(1, 11))
parser.add_argument('keyword', help='search keyword',
type=str, nargs='+')
args = parser.parse_args()
n: int = 5
if args.number is not None:
n = args.number
keywords: str = ' '.join(args.keyword)
try:
print(f'searching {keywords} …')
links: List[str] = get_links_google(keywords, n)
except Exception as err:
print(err)
else:
for link in links:
webbrowser.open(link)
入出力結果(Zsh、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
% ./ksearch.py
usage: ksearch.py [-h] [-n {1,2,3,4,5,6,7,8,9,10}] keyword [keyword ...]
ksearch.py: error: the following arguments are required: keyword
% ./ksearch.py -h
usage: ksearch.py [-h] [-n {1,2,3,4,5,6,7,8,9,10}] keyword [keyword ...]
positional arguments:
keyword search keyword
optional arguments:
-h, --help show this help message and exit
-n {1,2,3,4,5,6,7,8,9,10}, --number {1,2,3,4,5,6,7,8,9,10}
how many
% ./ksearch.py --help
usage: ksearch.py [-h] [-n {1,2,3,4,5,6,7,8,9,10}] keyword [keyword ...]
positional arguments:
keyword search keyword
optional arguments:
-h, --help show this help message and exit
-n {1,2,3,4,5,6,7,8,9,10}, --number {1,2,3,4,5,6,7,8,9,10}
how many
% ./ksearch.py python
searching python …
% ./ksearch.py -n -1 golang
usage: ksearch.py [-h] [-n {1,2,3,4,5,6,7,8,9,10}] keyword [keyword ...]
ksearch.py: error: argument -n/--number: invalid choice: -1 (choose from 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
% ./ksearch.py -n 11 golang
usage: ksearch.py [-h] [-n {1,2,3,4,5,6,7,8,9,10}] keyword [keyword ...]
ksearch.py: error: argument -n/--number: invalid choice: 11 (choose from 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
% ./ksearch.py -n 1 golang
searching golang …
% ./ksearch.py -n 2 python golang
searching python golang …
%
0 コメント:
コメントを投稿