質問編集履歴

1

コーディングの変更

2021/11/03 07:36

投稿

Zarathustra
Zarathustra

スコア3

test CHANGED
@@ -1 +1 @@
1
- URL内のURLを「次へ」の分だけスクレイピング
1
+ URL内のURLを「次へ」の分だけ取得したい
test CHANGED
@@ -4,56 +4,44 @@
4
4
 
5
5
  取得したURL内にジャンル毎のURLがあり全てを取得したい。
6
6
 
7
- (ジャンル毎のURL内に「次へ」ボタンがある場合全てのページ分のみ
7
+ (ジャンル毎のURL内に「次へ」ボタンがある場合全てのページ分)
8
8
 
9
9
  ```python
10
10
 
11
- コード
11
+ #ジャンル毎のURLは取得済みでリストに入っています。
12
12
 
13
- detail_urls_lists = []
13
+ url_list = []
14
14
 
15
- for i in range(1,10):
15
+ for i in url_list:
16
16
 
17
- detail_urls2 = 'https://~' + '?page={}'
17
+ r = requests.get(i)
18
18
 
19
- detail_urls_lists.append(detail_urls2)
19
+ soup = BeautifulSoup(r.text)
20
20
 
21
+ get_next = soup.find('li',class_ = ('next'))
22
+
23
+
24
+
25
+ #1ページのみの場合はNoneが表示される為、複数ページある場合は「次ページ」を取得
26
+
27
+ if get_next != None:
28
+
21
- detail_urls = detail_urls2.format(i)
29
+ next_pages2 = get_next.select('a[href]')
30
+
31
+ for next_pages in next_pages2:
32
+
33
+ next_page = 'https://----' + n_pages.get('href')
34
+
35
+ print(n_page)
36
+
37
+
22
38
 
23
39
  ```
24
40
 
25
41
  ####問題点
26
42
 
27
- ・ジャンル毎のURLが「次へ」が無い場合はページのみで良
43
+ このコーディングだと複数ペーある場合は、2ページのみを取得になってる為、全ページにしたい。
28
44
 
29
-  for文で繰り返ている為、1〜9ページ分のURLが完成する。
45
+ ####試た事
30
46
 
31
-
32
-
33
- 上記の場合、2〜9ページのURLを開いても「404 NOT FOUND」の表示がされる。
34
-
35
- (「次へ」が2回あり計3ページの場合、4〜9が「404 NOT FOUND」)
36
-
37
-
38
-
39
-
40
-
41
- ・とりあえずはrange関数の終止点を10(9ページ目)にしているが
42
-
43
-  10ページ以上「次へ」がある場合にスクレイピングされない。
44
-
45
-
46
-
47
- 上記の場合、終止点を1000など「次へ」ボタンが無いであろう数まで設定
48
-
49
- しておけば解決するが数ページしかない場合PCが重くなる
50
-
51
-
52
-
53
- ####解決したい方法
54
-
55
- ・range関数の終止点をとりあえず1000などにしてif文で「404 NOT FOUND」の場合は
56
-
57
- リストに追加しないようにする。
58
-
59
- range関数終止点を「404 NOT FOUND」になる前あるいはURLがある分だけ表記にたい
47
+ ifの箇所をwhile文に変更した。←1ページ目「次へ」から2ページ目取得。2ページ目の次へから3ページ目を取得。を繰り返して欲しいのに、1ページ目「次へ」から2ページ目を取得を無限ループてしまう