質問編集履歴

1

HTMLと出力したい結果を掲載し、説明文も追記しました。

2019/06/23 10:29

投稿

umai29
umai29

スコア19

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- PythonにてWebスクレイピングをしておりまして、その結果をarrに格納し、print関数で表示したいのですが、
5
+ PythonにてWebスクレイピングをしておりまして、その結果をarr1・arr2に格納し、print関数で表示したいのですが、値が格納されていないため、以下のようなエラーが起こります。
6
-
7
- 値が格納されていないため、以下のようなエラーが起こります。
8
6
 
9
7
 
10
8
 
@@ -12,6 +10,100 @@
12
10
 
13
11
 
14
12
 
13
+ 例えば、次のようなHTMLがあります。
14
+
15
+ (説明の便宜上、簡易的なものにしてあります。ご了承くださいませ。)
16
+
17
+
18
+
19
+ ```HTML
20
+
21
+ http://hoge.co.jp
22
+
23
+ <h3>
24
+
25
+ <a href="http://hoge.co.jp/2001">ダイエット方法</a>
26
+
27
+ <p class="profileName">太郎</p>
28
+
29
+ <a href="http://hoge.co.jp/2002">健康になるには</a>
30
+
31
+ <p class="profileName">次郎</p>
32
+
33
+ <a href="http://hoge.co.jp/2003">美容関連</a>
34
+
35
+ <p class="profileName">和郎</p>
36
+
37
+ </h3>
38
+
39
+
40
+
41
+ http://fuga.co.jp
42
+
43
+ <h3>
44
+
45
+ <a href="http://fuga.co.jp/2001">金運上昇</a>
46
+
47
+ <p class="profileName">一郎</p>
48
+
49
+ <a href="http://fuga.co.jp/2002">健康運上昇</a>
50
+
51
+ <a href="http://fuga.co.jp/2003">恋愛運上昇</a>
52
+
53
+ <p class="profileName">三郎</p>
54
+
55
+ </h3>
56
+
57
+
58
+
59
+ http://piyo.co.jp
60
+
61
+ <h3>
62
+
63
+ <a href="http://piyo.co.jp/2001">音楽</a>
64
+
65
+ <a href="http://piyo.co.jp/2002">美術</a>
66
+
67
+ <p class="profileName">健太</p>
68
+
69
+ <a href="http://piyo.co.jp/2003">書道</a>
70
+
71
+ <p class="profileName">康太</p>
72
+
73
+ </h3>
74
+
75
+ ```
76
+
77
+
78
+
79
+ これらをスクレイピングし、出力する結果を以下のようなものにしたいです。
80
+
81
+ 1.  ダイエット方法  太郎
82
+
83
+ 2.  健康になるには  次郎
84
+
85
+ 3.  美容関連  和郎
86
+
87
+ 1.  金運上昇  一郎
88
+
89
+ 2.  健康運上昇  
90
+
91
+ 3.  恋愛運上昇  三郎
92
+
93
+ 1.  音楽  
94
+
95
+ 2.  美術  健太
96
+
97
+ 3.  書道  康太
98
+
99
+
100
+
101
+ 名前がないものがありますが、それはそれで空白として出力するようにしたいのです。
102
+
103
+ 以下のPythonのコードですと、エラーが起きてしまいます。
104
+
105
+
106
+
15
107
  ```Python
16
108
 
17
109
 
@@ -30,9 +122,17 @@
30
122
 
31
123
 
32
124
 
125
+ #URL番号
126
+
33
127
  n = 0
34
128
 
129
+
130
+
35
- while n < 3:
131
+ while n < len(url):
132
+
133
+ c = 0
134
+
135
+
36
136
 
37
137
  html = BeautifulSoup(requests.get(url[n]), "lxml")
38
138
 
@@ -40,19 +140,21 @@
40
140
 
41
141
  for at in hoge.find_all("a"):
42
142
 
43
- arr1.append(at.get_text())
143
+ arr1[n].append(at.get_text())
44
-
45
-
46
-
144
+
145
+
146
+
47
- for fuga in html.find_all("h4"):
147
+ for fuga in html.find_all("p", class_="profileName"):
48
-
49
- for at in fuga.find_all("a"):
148
+
50
-
51
- arr2.append(at.get_text())
149
+ arr2[n].append(at.get_text())
52
150
 
53
151
 
54
152
 
55
- print(arr1[n], "\t", arr2[n])
153
+ print(c+1, "\t", arr1[n][c], "\t", arr2[n][c])
154
+
155
+ c += 1
156
+
157
+
56
158
 
57
159
  n += 1
58
160
 
@@ -96,9 +198,9 @@
96
198
 
97
199
 
98
200
 
99
- while文で3回ループし、3つのURLのデータを取得し、配列arr1、arr2にそれぞれ要素を3つずつ格納させたいです。
201
+ while文でURLの数だけループ(今回ですと3つで3回)し、それぞれのURLのデータを取得し、配列arr1、arr2にそれぞれ要素を3つずつ格納させたいです。
100
-
202
+
101
- 例えば3回中2回目ループで、データが取得できなかった場合も、空白として配列に格納するには、どのようにすればよろしいでしょうか。
203
+ 上記HTMLでいうと「健康運上昇」「音楽」ところ名前がありませんがそのようにデータが取得できなかった場合も、空白として配列に格納するには、どのようにすればよろしいでしょうか。
102
204
 
103
205
 
104
206