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