Skip to content

Commit 8faf6ce

Browse files
committed
Update
1 parent 4d55f38 commit 8faf6ce

3 files changed

Lines changed: 22 additions & 7 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,5 @@ dmypy.json
123123

124124
# Pyre type checker
125125
.pyre/
126+
_test.py
127+
/.vscode

scraper_ameblo_api.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,17 @@ def parse_list_new(blog_id, start_entry, until=None):
6565
def download_all(blog_id, save_folder='.', executor=None, until=None, last_entry='auto'):
6666

6767
if last_entry == 'auto':
68-
soup = get(f'https://ameblo.jp/{blog_id}/')
69-
last_entry = re.search(r'entry-(\d+).html',
70-
soup.select_one(f'a[href*="{blog_id}/entry-"]')['href'])[1]
68+
soup = get(f'https://ameblo.jp/{blog_id}/')
69+
if anchor := soup.select_one(f'a[href*="{blog_id}/entry-"]'):
70+
last_entry = re.search(r'entry-(\d+).html', anchor['href'])[1]
71+
else:
72+
for s in soup('script'):
73+
if s.text.startswith('window.INIT_DATA'):
74+
if m := re.search(r'entryMap.+?"(\d+)"', s.text):
75+
last_entry = m[1]
76+
break
77+
if last_entry == 'auto':
78+
raise Exception(f'[Error] cannot detect last entry for blog {blog_id}!')
7179
print(f'Info: {blog_id}\'s newest entry is {last_entry}.')
7280
if last_entry == until:
7381
print('No new update.')

util.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ def get(url, headers=None, cookies=None, encoding='utf-8'):
3636
return BeautifulSoup(r.text, 'lxml')
3737

3838

39-
def download(url, filename=None, save_path='.', cookies=None, dry_run=False, dupe='skip',referer=None):
40-
39+
def download(url, filename=None, save_path='.', cookies=None, dry_run=False, dupe='skip',referer=None, placeholder=True):
40+
if dupe not in ['skip', 'overwrite', 'rename']:
41+
raise ValueError('[Error] Invalid dupe method: {dupe} (must be either skip, overwrite or rename).')
42+
4143
def check_dupe(filename):
4244
if not filename.exists():
4345
return filename
@@ -55,6 +57,7 @@ def check_dupe(filename):
5557
i = i + 1
5658
print(f'[Warning] File already exists! Rename to {filename.name}.')
5759
return filename
60+
5861

5962
if dry_run:
6063
return
@@ -88,10 +91,12 @@ def check_dupe(filename):
8891
for chunk in r.iter_content(chunk_size=8192):
8992
if chunk:
9093
fio.write(chunk)
94+
return 200
9195
else:
9296
print(f'[Error] Get HTTP {r.status_code} from {url}.')
93-
# An empty file will still be created. This is by design.
94-
f.with_suffix(f.suffix + '.broken').open('wb').close()
97+
if placeholder:
98+
f.with_suffix(f.suffix + '.broken').open('wb').close()
99+
return 404
95100

96101

97102

0 commit comments

Comments
 (0)