今さらPython

ファイルの有無で分岐し、ないか古いならダウンロードしてみましょう。
サンプルは、ここの管理人の投稿しているネット小説のサイトね。単純なサイト構成だし権利上の問題もないでしょう。

コード

#!/usr/bin/env python3
# coding: UTF-8

from urllib import request
from lxml import html
import os
import os.path
import pathlib

URL = "https://ncode.syosetu.com/n3170ch/"
fn = "0.html"

#
# ダウンロードの必要性判定。
#
tf = False # URL downloadするかの判定フラグ
# 該当ファイルがないなら真
if not os.path.isfile(fn):
	tf = True
# 該当ファイルがあっても、本スクリプトより古いなら真(URL直接記述なので)
else:
	ff = pathlib.Path(fn)
	ff2 = pathlib.Path(__file__)
	if ff.stat().st_mtime < ff2.stat().st_mtime:
		tf = True

# 判定結果が真ならダウンロードする。偽ならファイルから読む。
if tf == True:
	html2 = request.urlopen(URL).read()
	with open(fn, mode='w') as f:
		f.write(html2.decode('utf-8'))
else:	
	with open(fn, mode='r') as f:
		html2 = f.read().encode('utf-8') # fromstringに食わせるのはbyteである必要がある

print(type(html2))

# スクレイピングしてリンクの一覧を取り出す。
data3 = html.fromstring(html2) # str()してはいけない。化ける
ttls = data3.xpath("//dl//dd//a")
for x in ttls:
	if type(x.text) is str and len(x.text) > 3:
		#print(type(x))
		xname = x.text
		xlink = x.attrib['href']
		print(xname,"\t",xlink)

実行結果

<class 'bytes'>
プロローグ       /n3170ch/1/ 
魔法の考察       /n3170ch/4/
ぽんこつバイオレンスと出会い     /n3170ch/5/
旅のお供完成     /n3170ch/6/
砂浜と結界       /n3170ch/7/
拾いました。     /n3170ch/8/
追憶の魔法       /n3170ch/10/
旅路のあれこれ   /n3170ch/11/
ポリット平原(1)          /n3170ch/12/
ポリット平原(2)          /n3170ch/13/
教団の女         /n3170ch/14/
とんずらしよう   /n3170ch/16/
廃隧道(はいずいどう)     /n3170ch/17/
それぞれの夜     /n3170ch/18/
女は強し?       /n3170ch/19/
異世界の人々     /n3170ch/20/
砂漠の町にて     /n3170ch/21/
魔族と文化       /n3170ch/22/
アイリスの事情   /n3170ch/23/

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS