[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『URL先サイトのソースの中に「wp-content」』(メイン)
A列にURLの羅列が記入されています。
そのA列のURLは、10万以上あります。
そのURL先サイトのソースの中に、「wp-content」の記述がない場合。
そのURLの隣セルに「○」を表示させたいです。
これができるマクロはどのような記述になるでしょうか?
ちなみに、A列で取得してB列に「○」するだけのものはあります。
Sub ChkHTML()
Dim xHttp As Object
Set xHttp = CreateObject("Microsoft.XMLHTTP")
r = 1
Do While Range("A" & r).Value <> ""
sUrl = Range("A" & r).Value
xHttp.Open "GET", sUrl, False
xHttp.send
sHtml = xHttp.responseText
nRtn = InStr(sHtml, "wp-content")
If nRtn = 0 Then
Range("B" & r) = "○"
End If
r = r + 1
Loop
Set xHttp = Nothing
End Sub
ですが、途中で「アクセスが拒否されました」と出たりして、
マクロが勝手に止まります。
なので、A列にあるURL全てを調べることができないでいます。
どうにか、マクロで自動で取得していくには、
どのような記述にすればいいでしょうか?
エクセル2016です。
よろしくお願いいたします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(γ) 2019/03/14(木) 21:52
実はマクロに関して、全く知識がなくて、
上記のマクロも、別の方が書いたものです。
右も左もわからない状態でして、
それでも、「wp-content」の記述がないサイトを探す。
これを、早くしなくてはならなく質問させて頂きました。
エラーが出ずに、A列をずっと調べていくには、
xHttp.Open "200", sUrl, False
というようにすればいいのでしょうか?
(メイン) 2019/03/14(木) 22:49
On Error Resume Next Do While Range("A" & r).Value <> "" sUrl = Range("A" & r).Value xHttp.Open "GET", sUrl, False xHttp.send If Err.Number = 0 Then sHtml = xHttp.responseText nRtn = InStr(sHtml, "wp-content") If nRtn = 0 Then Range("B" & r) = "○" End If End If r = r + 1 Loop On Error GoTo 0 (???) 2019/03/15(金) 11:19
こんにちは。
「アクセスが拒否されました」って、Getを拒否されるページってありますかね?
・https じゃなくて、 http でアクセスしている? ・パスワード認証が必要な領域にアクセスしている?
URLを見直してみたらどうでしょう
???さん On Error Resume Next On Error GoTo 0 をループの中に入れるか、 エラー発生後、Err.Clearしないと、Err.Numberがクリアされないです。
(でれすけ) 2019/03/15(金) 11:46
調べるURLは、
・https、http、の両方が混じっています。
・パスワード認証が必要なサイトも混じっています
SSL化されていない、パスワード認証が必要、
これらのサイトは、見つけたいサイトではありません。
そのため、スルーして次々と調べていきたいです。
xHttp.Open "GET", sUrl, False
ここが問題のようですが、どのように修正するべきでしょうか?
よろしくお願いいたします。
(メイン) 2019/03/15(金) 11:50
そして、Open時でエラーが出ているか、ステップ実行して確認してみてください。 不正URLでもOpenは通って、Sendでエラー発生していませんか? そして、StatusプロパティはSendしないとセットされないかと思います。
(???) 2019/03/15(金) 12:01
とりあえずこんな感じです。
Sub ChkHTML() Dim xHttp As Object Set xHttp = CreateObject("Microsoft.XMLHTTP") Dim myErr_Number As Long, myErr_Description As String r = 1 Do While Range("A" & r).Value <> "" sUrl = Range("A" & r).Value xHttp.Open "GET", sUrl, False On Error Resume Next xHttp.send myErr_Number = Err.Number myErr_Description = Err.Description On Error GoTo 0 If myErr_Number = 0 Then sHtml = xHttp.responseText nRtn = InStr(sHtml, "wp-content") If nRtn = 0 Then Range("B" & r) = "○" Else Range("B" & r) = "--" End If Else Range("B" & r) = myErr_Description End If r = r + 1 Loop Set xHttp = Nothing End Sub
(でれすけ) 2019/03/15(金) 12:12
実際にやってみたところ、
セキュリティの警告というポップアップが出て、
・このwebサイトのIDまたはこの接続の完全性を確認できません。
というのが出ます。
どうやら、wp-contentがあるURLの時に出るようです。
URLの隣に、
・このリソースへのアクセスに必要なセキュリティ証明書は無効です。
と記述されます。
このポップアップを避けて、
wp-contentがないURLの隣に、○と付けるだけにしたいです。
よろしくお願いいたします。
(メイン) 2019/03/15(金) 13:06
ありがとうございます。
(メイン) 2019/03/15(金) 14:18
マクロは、順調に動いていたのですが、
途中にある、リダイレクトをするURLで止まります。
再開しようと思いましたが、
A列の最初から、初めてしまうようです。
そのため、
「A列全体("A" & r)をマクロ対象」から、
「セル選択範囲をマクロ対象」に変えたいです。
そして、そのセル選択範囲の隣に「○」を付けていく。
調べてみると、Rangeの部分に別の記述をするのかと思いました。
ですが、どのように記述すればいいか分からないです。
セル選択範囲をマクロ対象にするには、
どのような記述のマクロになるでしょうか?
よろしくお願いいたします。
(メイン) 2019/03/16(土) 08:03
ところで、サブドメイン名や該当ページが無いものは、
通常は404(Not Found)が返るだけでエラーにならないのではないですか?
むしろこちらのほうが例としては多い気もします。
この場合、
wp-contentがないURLの隣に、○と付けるとなりますが、
目的に沿った行動なのでしょうか。
興味の対象が○をつけていないもの(「wp-contentがある」もの)なら
それで良いと思いますが。
私は10万ものurlの分析目的が何なのかよくわかりませんでした。
興味の対象が「wp-contentがない」ではなく
「wp-contentがあるもの」なら少し思いつくこともありますが。
補足説明いただくとありがたい。
いずれにせよ、IT関連の業務のかたなんでしょうか?
>SSL化されていない、パスワード認証が必要、
>これらのサイトは、見つけたいサイトではありません。
などという発言と
>xHttp.Open "200", sUrl, False
>というようにすればいいのでしょうか?
などというおとぼけ発言を含むVBAスキルとの関係も不思議でした。
(γ) 2019/03/16(土) 09:55
選択したセルから開始できるようになりました。
ありがとうございます。
私は、WEBサイト作成の仕事をしています。
それで、いろんなサイトを見たりします。
ExcelにURLを管理していたのですが、
記述をしていたデータが消えてしまいました。
なぜ、「wp-contentがある」のに「○」を付けたいかというと、
数多あるURLの中から、目的のサイトを探しているためです。
その目的のサイトで覚えているのは、
・TOPページの印象
・WordPressで作られたサイトでない
の2つです。
調べるURLは10万以上あって、
その中から見つけるのは、手動では困難です。
そのため、マクロで絞れるのでは?と考えました。
ですが、マクロの知識が全くないため、
質問させていただいた次第であります。
間違ってもハッキングなどが目的ではありません。
というより、ハッキングする知識なども皆無です。
(メイン) 2019/03/16(土) 10:33
ずっと、「wp-content」があるかないか調べています。
いくつか調べられているのですが、
頻繁に、Excelが「応答なし」の状態になります。
その間は、マクロ自体も動いていないようです。
そして、Excelが急に強制終了してしまうこともあります。
これらの問題は、
何かの記述で避けられたりしますでしょうか?
「応答なし」の時間が、とても長くて、
全てのURLを調べるのに、相当時間がかかりそうです。
どうにか早くに調べて、サイトを見つけないとならないです。
ひとつ、よろしくお願いいたします。
(メイン) 2019/03/16(土) 14:14
こんにちは。
Excelが応答なしになっているということですが、 ただ、Excelが一生懸命仕事しているだけなんじゃないかと思います。
なにしろ、こちらでは、動作の検証のための再現ができませんので、 これで大丈夫かどうかわかりませんが、少し修正しました。 保証はできませんので、ご了承ください。
VBEの画面で メニューの[ツール]→[参照設定]で
[Microsoft XML v6.0] にチェックを入れてください。
変更点
・選択セルの1列目をURLの入力セルとして作業する ・実行中のURLのセルにジャンプ (動いてるのが目に見えるように) ・SSL関係の警告を無視 ・5秒でタイムアウト ・マクロ実行に一生懸命になりすぎないように一息(DoEvents)入れる
Sub ChkHTML() '!!!! [Microsoft XML v6.0] に参照設定すること
Dim xHttp As IServerXMLHTTPRequest Dim myErr_Number As Long, myErr_Description As String
Set xHttp = CreateObject("MSXML2.ServerXMLHTTP")
Dim aCell As Range R = 1 For Each aCell In Selection.Columns(1).Cells '選択セルの1列目がURL Application.Goto aCell '対象URLの列にジャンプ表示 DoEvents sUrl = aCell.Value If sUrl <> "" Then xHttp.Open "GET", sUrl, True xHttp.setOption SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, _ SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS ' SSL関係のエラーを無視 On Error Resume Next xHttp.send If xHttp.readyState <> 4 Then xHttp.waitForResponse 5 '5秒まってだめならタイムアウト End If If xHttp.readyState <> 4 Then Err.Raise 1004, , "タイムアウト" myErr_Number = Err.Number myErr_Description = Err.Description On Error GoTo 0 If myErr_Number = 0 Then sHtml = xHttp.responseText nRtn = InStr(sHtml, "wp-content") If nRtn = 0 Then aCell.Offset(, 1).Value = "○" Else aCell.Offset(, 1).Value = "--" End If Else aCell.Offset(, 1).Value = myErr_Description ' エラー時はエラー内容を表示 End If DoEvents End If Next Set xHttp = Nothing End Sub
(でれすけ) 2019/03/16(土) 16:28
「応答なし」を避ける設定として、
オプションの、
・【マルチスレッド計算を行う】のチェックをはずす
・【マルチスレッド処理を有効にする】のチェックをはずす
・【ハードウェア グラフィック アクセラレータを無効にする】にチェックを入れる
これらをしても駄目で、困ってました。
書いていただいたマクロでやってみたところ、
1つずつ、調べることができています!
どうもありがとうございます!
私もプログラミングができるようになろうと、
勉強しようと思っていたことがあります。
ですが、本業が忙しくて断念。
もう少し落ち着いてきたら、
プログラミングの勉強をしたいと思います。
そして、困っている人の後押しもできるようになりたいとも思いました。
返信していただいた皆様、ありがとうございます。
(メイン) 2019/03/16(土) 17:10
順調にマクロが動いていましたが、
途中で、強制終了になることがあります。
それが、
実行時エラー '-1072896658 (c00ce56e)'
指定したエンコードはシステムでサポートされていません。
というものです。
そのエラーが出るのは、次の2つのようなURLです。
https://buongiornonyc.com
http://www.editorialgerminal.com/
おそらく、リダイレクトをするから、
そして、for saleのもの?のようです。
これらの実行時エラーを避けることはできますでしょうか?
どのような記述で、それはできるでしょうか?
ひとつ、よろしくお願いいたします。
(メイン) 2019/03/17(日) 07:05
そもそも何が目的なんですか、と問わざるを得ません。
一度見たサイトを探すなら、履歴を調べるのが先だろうし、
10万件のurlはどこから入手した種類のものなんですか?
怪しげな作業のように思われないようにしたほうがよいでしょう。
(γ) 2019/03/17(日) 07:29
履歴は、ずっと前に消してしまっています。
ブックマークをしておらず、Excelに記述していました。
ですが、その記述のデータが消えてしまったので探しています。
URLは、同じサイト作成の人に送付していただきました。
サイト作成において、参考になるサイトを記述していたのですが、
それらが消えてしまって困っています。
それらのサイトをどうこうするつもりは無いです。
というより、それができる知識も持ってません。
それができたら、マクロについて聞いてもないです。
たぶん、マクロなどプログラミングの知識が皆無なため、
説明するべき、言葉が足りないのかもしれません。申し訳ないです。
(メイン) 2019/03/17(日) 10:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.