[[20190314203604]] 『URL先サイトのソースの中に「wp-content」』(メイン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


xHttp.status が 200(正常取得の意味)の時だけ処理すればよいのでは?
200以外は処理せずに、statusコードだけをシートに書き出すようにすれば
エラーは自ずと避けられます。

(γ) 2019/03/14(木) 21:52


返信ありがとうございます!

実はマクロに関して、全く知識がなくて、
上記のマクロも、別の方が書いたものです。

右も左もわからない状態でして、
それでも、「wp-content」の記述がないサイトを探す。

これを、早くしなくてはならなく質問させて頂きました。

エラーが出ずに、A列をずっと調べていくには、
xHttp.Open "200", sUrl, False
というようにすればいいのでしょうか?
(メイン) 2019/03/14(木) 22:49


別案ですが、On Error で逃げれば良いのでは?
    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


しまった、1つエラーがでると、以降全てエラーになっちゃいますね。 でれすけさん、ありがとうございます。

そして、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


IEの設定で出ないようにできました。
失礼しました。

ありがとうございます。
(メイン) 2019/03/15(金) 14:18


でれすけさんのマクロを実行してみました。

マクロは、順調に動いていたのですが、
途中にある、リダイレクトをするURLで止まります。

再開しようと思いましたが、
A列の最初から、初めてしまうようです。

そのため、
「A列全体("A" & r)をマクロ対象」から、
「セル選択範囲をマクロ対象」に変えたいです。

そして、そのセル選択範囲の隣に「○」を付けていく。

調べてみると、Rangeの部分に別の記述をするのかと思いました。
ですが、どのように記述すればいいか分からないです。

セル選択範囲をマクロ対象にするには、
どのような記述のマクロになるでしょうか?

よろしくお願いいたします。
(メイン) 2019/03/16(土) 08:03


勉強させていただきました。
解決したようでなによりです。
 
一応、現時点の質問にコメントしておきましょう。
対象範囲が変動するなら、開始したい行の一部を選択した状態にしておいて
r = 1

r = Selection.Row
に変えたコードを使えばよいでしょう。
 
■以下、余談。
 
ドメイン名が間違っている場合などはエラーになりますが、
それは想定していませんでした。
漠然と、取得結果によってエラーになるものと即断していました。
そこが私の勘違いでした。

ところで、サブドメイン名や該当ページが無いものは、
通常は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


https://  buongiornonyc.com
はセキュリティ上の危険があるのでアクセスしないほうがよいと思います。(回答者さん向け)

そもそも何が目的なんですか、と問わざるを得ません。
一度見たサイトを探すなら、履歴を調べるのが先だろうし、
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.