開発環境
- 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.10(演習プロジェクト)、11.10.4(リンクの検査)の解答を求めてみる。
コード
#!/usr/bin/env python3
import requests
import bs4
import os
import sys
import re
print('11.10.4')
if len(sys.argv) == 1:
url = 'https://www.example.com'
else:
url = sys.argv[1]
try:
res = requests.get(url)
res.raise_for_status()
except Exception as err:
print(err)
sys.exit(1)
bs = bs4.BeautifulSoup(res.text, 'lxml')
elems = bs.select('a')
dirname = 'downloads'
os.mkdir(dirname)
os.chdir(dirname)
reg = re.compile(r'^\s*$')
urls = {elem.get('href') for elem in elems}
for url0 in urls:
if not url0.startswith('http'):
url0 = url + url0
data = requests.get(url0)
try:
data.raise_for_status()
except Exception as err:
print(f'{url0}: {err}')
else:
filename = os.path.basename(url0)
if reg.match(filename):
continue
with open(filename, 'wb') as f:
for chunk in data.iter_content(1000000):
f.write(chunk)
入出力結果(Zsh、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
% ./sample18.py
11.10.4
% ls downloads
./ ../ example
% rm -rf downloads
% ./sample18.py a
11.10.4
Invalid URL 'a': No schema supplied. Perhaps you meant http://a?
% ./sample18.py https://a.com
11.10.4
HTTPSConnectionPool(host='a.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x10ea8ee10>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))
% ./sample18.py https://www.yahoo.co.jp
11.10.4
https://news.yahoo.co.jp/fc: 502 Server Error: connect failed for url: https://news.yahoo.co.jp/fc
%
0 コメント:
コメントを投稿