質問編集履歴
5
イメージの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,6 +7,10 @@
|
|
7
7
|
・A列にあるキーワード10000個の検索結果上位3つのURLを、それぞれB列〜D列に取得
|
8
8
|
|
9
9
|
・EncodeURLを使わずに行う(excel2010でEncodeURLを使えないため)
|
10
|
+
|
11
|
+

|
12
|
+
|
13
|
+
|
10
14
|
|
11
15
|
|
12
16
|
|
4
指摘いただいた点の加筆
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
EncodeURLを使わずYahoo検索結果のURLをスクレイピングする代替コード(Excel2010使用)
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
・A列にあるキーワード10000個の検索結果上位3つのURLを、それぞれB列〜D列に取得
|
8
8
|
|
9
|
-
・EncodeURLを使わずに行う
|
9
|
+
・EncodeURLを使わずに行う(excel2010でEncodeURLを使えないため)
|
10
10
|
|
11
11
|
|
12
12
|
|
3
コードのアップデート
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VBAで
|
1
|
+
VBAでEncodeURLを使えない時の代替コード
|
test
CHANGED
@@ -1,139 +1,77 @@
|
|
1
1
|
こんにちは。
|
2
|
-
|
3
|
-
下記の方法を模索しています。よろしくお願いします。
|
4
2
|
|
5
3
|
|
6
4
|
|
7
5
|
###実現したいこと
|
8
6
|
|
9
|
-
・
|
7
|
+
・A列にあるキーワード10000個の検索結果上位3つのURLを、それぞれB列〜D列に取得
|
10
8
|
|
11
|
-
・
|
9
|
+
・EncodeURLを使わずに行う
|
12
10
|
|
13
|
-
・検索結果の上位3つのURLを
|
14
11
|
|
15
|
-
・1行ごとに、B列〜D列に取得
|
16
12
|
|
17
|
-
|
13
|
+
###該当のソースコード
|
18
14
|
|
19
|
-

|
20
15
|
|
16
|
+
|
17
|
+
```ここに言語を入力
|
18
|
+
|
19
|
+
Sub main()
|
20
|
+
|
21
|
-
|
21
|
+
Dim objIE As InternetExplorer
|
22
|
+
|
23
|
+
Set objIE = CreateObject("InternetExplorer.Application")
|
24
|
+
|
25
|
+
Dim i As Long
|
26
|
+
|
27
|
+
Dim l As Integer
|
22
28
|
|
23
29
|
|
24
30
|
|
25
31
|
|
26
32
|
|
27
|
-
###前提条件
|
28
|
-
|
29
|
-
・検索結果が3つ未満になることは起こり得ない
|
30
|
-
|
31
|
-
・検索結果の上部に出てくる広告リンクは省いた上位3つを取得
|
32
|
-
|
33
|
-
・検索結果の上部に、広告以外の邪魔者リンク(※)は出てこないキーワード群である
|
34
|
-
|
35
|
-
(※画像検索・ニュース検索・まとめ一覧などの検索結果リンク)
|
36
|
-
|
37
|
-
・URLは、ハイパーリンクでもプレーンテキストでも構わない
|
38
|
-
|
39
|
-
・URLは、日本語リンクでもhtml表記でも構わない
|
40
|
-
|
41
|
-
|
33
|
+
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
|
42
|
-
|
43
|
-
・DoEventsは使わない
|
44
34
|
|
45
35
|
|
46
36
|
|
47
|
-
###該当のソースコード
|
48
|
-
|
49
|
-
yahoo
|
37
|
+
objIE.navigate "https://search.yahoo.co.jp/search?p=" & Replace(Application.EncodeURL(Range("A" & i)), "%20", "+")
|
50
38
|
|
51
39
|
|
52
40
|
|
53
|
-
|
41
|
+
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
|
54
42
|
|
55
|
-
|
43
|
+
DoEvents
|
44
|
+
|
45
|
+
Loop
|
56
46
|
|
57
47
|
|
58
48
|
|
59
|
-
n = Cells(Rows.Count, "A").End(xlUp).Row
|
60
|
-
|
61
|
-
|
49
|
+
For l = 0 To 2
|
62
|
-
|
63
|
-
Range("A" & i).Select
|
64
|
-
|
65
|
-
a = ActiveCell.Value
|
66
|
-
|
67
|
-
Call Yahoo検索(a)
|
68
|
-
|
69
|
-
Next i
|
70
|
-
|
71
|
-
End Sub
|
72
50
|
|
73
51
|
|
74
52
|
|
75
|
-
|
53
|
+
Range("B" & i).Offset(, l) = objIE.document.getElementById("WS2m").getElementsByClassName("w")(l).getElementsByTagName("a")(0).href
|
76
54
|
|
77
|
-
Set objIE = CreateObject("InternetExplorer.Application")
|
78
55
|
|
79
|
-
strURL = "http://www.yahoo.co.jp/"
|
80
56
|
|
81
|
-
|
57
|
+
Next l
|
82
58
|
|
83
|
-
|
59
|
+
Next i
|
84
60
|
|
85
|
-
.Navigate2 strURL
|
86
61
|
|
87
|
-
Do While .Busy = True
|
88
62
|
|
89
|
-
|
63
|
+
objIE.Quit
|
90
64
|
|
91
|
-
|
65
|
+
Set objIE = Nothing
|
92
66
|
|
93
|
-
Do While .document.ReadyState <> "complete"
|
94
67
|
|
95
|
-
DoEvents
|
96
|
-
|
97
|
-
Loop
|
98
|
-
|
99
|
-
.document.getElementById("srchtxt").Value = keyWD
|
100
|
-
|
101
|
-
.document.forms(0).Submit
|
102
|
-
|
103
|
-
End With
|
104
68
|
|
105
69
|
End Sub
|
106
70
|
|
107
71
|
```
|
108
72
|
|
109
|
-
|
73
|
+
難しければスプレッドシートのIMPORTXMLで対応しようかと思いますが
|
110
74
|
|
111
|
-
1)検索結果一覧ページから上位3つのURLを取得するコードの書き方
|
112
|
-
|
113
|
-
|
75
|
+
処理速度が遅いのでExcelでできればと思います。
|
114
|
-
|
115
|
-
です。
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
###補足
|
122
|
-
|
123
|
-
・getelement?を使う
|
124
|
-
|
125
|
-
・広告の除外はid指定で可能(広告はid="So1"、検索結果はid="WS2m")
|
126
|
-
|
127
|
-
・InnerTextをチェックし「キャッシュ」という文字を含むものを除外する必要あり
|
128
|
-
|
129
|
-
という点まで辿り着きましたが、コードにどう書けば良いのかで躓いています。
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
手作業で3日間やってきたのですが400件/日が限界でした。
|
134
|
-
|
135
|
-
1ヶ月で1万件は気が遠くなる作業のため、VBAを勉強しはじめ試行錯誤中です。
|
136
|
-
|
137
|
-
|
138
76
|
|
139
77
|
よろしくお願いします。
|
2
誤字を直しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
(※画像検索・ニュース検索・まとめ一覧などの検索結果リンク)
|
36
36
|
|
37
|
-
・URLは、ハイパーリンクでもテキスト
|
37
|
+
・URLは、ハイパーリンクでもプレーンテキストでも構わない
|
38
38
|
|
39
39
|
・URLは、日本語リンクでもhtml表記でも構わない
|
40
40
|
|
1
自分で調べたことを追記します。
test
CHANGED
File without changes
|
test
CHANGED
@@ -120,57 +120,13 @@
|
|
120
120
|
|
121
121
|
###補足
|
122
122
|
|
123
|
-
|
123
|
+
・getelement?を使う
|
124
124
|
|
125
|
+
・広告の除外はid指定で可能(広告はid="So1"、検索結果はid="WS2m")
|
125
126
|
|
127
|
+
・InnerTextをチェックし「キャッシュ」という文字を含むものを除外する必要あり
|
126
128
|
|
127
|
-
|
128
|
-
|
129
|
-

|
130
|
-
|
131
|
-
```ここに言語を入力
|
132
|
-
|
133
|
-
<span class="u">giftmall.co.jp/fathersday/</span>
|
134
|
-
|
135
|
-
```
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
ーーー
|
140
|
-
|
141
|
-
取得候補2)下記ブルー文字の部分
|
142
|
-
|
143
|
-

|
144
|
-
|
145
|
-
```ここに言語を入力
|
146
|
-
|
147
|
-
<a href="http://search.yahoo.co.jp/r/FOR=vCt3T.xV3ig02GVFcOO75T07yxQPCZ.54dgh4CoZ7jSFMtoM1DL9LuO6tWAtzk.vR4mXvWKBBibMMNq1fjMQYo0uGBj.8SHYV9Fw6C5AEzuqh6bf2a7yyCdDaW2BKorsLV_QZn8QCF16xIb1kF1aSwqzEo1lwJ8Aqj3KDRRaQTWVTDdqajFo.WyEyltI7bOvPNDwnTLdNcaFnrJPA_C3Chr1UhtG/_ylt=A2RCDSuxc0xZEHUAR5WDTwx.;_ylu=X3oDMTEybzU5ajRmBHBvcwM3BHNlYwNzcgRzbGsDdGl0bGUEdnRpZANqcDA1OTI-/SIG=11ojqqnbg/EXP=1498283377/**http%3A//www.e87.com/selection/father/" onmousedown="return lswap(this,'http%3A//www.e87.com/selection/father/','FOR=vCt3T.xV3ig02GVFcOO75T07yxQPCZ.54dgh4CoZ7jSFMtoM1DL9LuO6tWAtzk.vR4mXvWKBBibMMNq1fjMQYo0uGBj.8SHYV9Fw6C5AEzuqh6bf2a7yyCdDaW2BKorsLV_QZn8QCF16xIb1kF1aSwqzEo1lwJ8Aqj3KDRRaQTWVTDdqajFo.WyEyltI7bOvPNDwnTLdNcaFnrJPA_C3Chr1UhtG/','A2RCDSuxc0xZEHUAR5WDTwx.','X3oDMTEybzU5ajRmBHBvcwM3BHNlYwNzcgRzbGsDdGl0bGUEdnRpZANqcDA1OTI-','11ojqqnbg','1498283377')">【遅れてゴメンね】<b>父の日プレゼント</b>・ギフト特集2017|イイハナ</a>
|
148
|
-
|
149
|
-
```
|
150
|
-
|
151
|
-
(↑onmousedown="return lswap(this,'〜のあと)
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
ーーー
|
156
|
-
|
157
|
-
※回避したい広告リスティングには
|
158
|
-
|
159
|
-
<div class="a cf"><span class="u"><span class="ad">
|
160
|
-
|
161
|
-
が使われていました。
|
162
|
-
|
163
|
-
```
|
164
|
-
|
165
|
-
<div class="a cf"><span class="u"><span class="ad">広告</span>pet.benesse.ne.jp/</span></div>
|
166
|
-
|
167
|
-
```
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
取得するURLは、置換で対応できるものであれば不完全でも構いません。
|
129
|
+
という点まで辿り着きましたが、コードにどう書けば良いのかで躓いています。
|
174
130
|
|
175
131
|
|
176
132
|
|