使用VBA从Google获取第一个图像链接

时间:2017-08-21 13:15:03

标签: excel vba

我正在使用以下代码从Google获取我正在搜索的某些值的第一个图片链接。 但它给了我谷歌的徽标图像。

Screenshot for the results I'm currently getting

您能帮我修改一下以获得准确的图像吗? 另外,我需要修改它以获得大图像。 你能支持吗?

Public Sub Test()
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim imgElements As IHTMLElementCollection
Dim imgElement As HTMLImg
Dim aElement As HTMLAnchorElement
Dim N As Integer, I As Integer
Dim Url As String, Url2 As String
Dim LastRow As Long
Dim m, sImageSearchString

LastRow = Range("A" & Rows.Count).End(xlUp).Row

For I = 1 To LastRow
    Url = "http://www.google.co.in/search?q=" & Cells(I, 1) & "&source=lnms&tbm=isch&sa=X&rnd=1"
    Set IE = New InternetExplorer

    With IE
        .Visible = False
        .Navigate Url 'sWebSiteURL

        Do Until .readyState = 4: DoEvents: Loop
            'Do Until IE.document.readyState = "Complete": DoEvents: Loop

            Set HTMLdoc = .document

            Set imgElements = HTMLdoc.getElementsByTagName("IMG")

            N = 1
            For Each imgElement In imgElements
                If InStr(imgElement.src, sImageSearchString) Then
                    If imgElement.ParentNode.nodeName = "A" Then
                        Set aElement = imgElement.ParentNode

                        Url2 = imgElement.src
                        N = N + 1
                    End If
                End If
            Next

            Cells(I, 2) = Url2

            IE.Quit
            Set IE = Nothing
        End With
    Next End Sub

1 个答案:

答案 0 :(得分:0)

试试这个

private GestureDetector gestureDetectorOnClick;

gestureDetectorOnClick = new GestureDetector(this,
                new SingleTapConfirm());

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        ImageView imageView = (ImageView) v;
        if (gestureDetectorOnClick.onTouchEvent(event)) {
            v.performClick();
        }
         else {
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:

                matrix.set(imageView.getImageMatrix());
                startPoint.set(event.getX(), event.getY());
                savedMatrix.set(matrix);
                mode = DRAG;
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                mode = NONE;
                savedMatrix.set(matrix);
                break;
            case MotionEvent.ACTION_MOVE:
                if (mode == DRAG) {
                    matrix.set(savedMatrix);
                    matrix.postTranslate(event.getX() - startPoint.x,
                            event.getY() - startPoint.y);
                } else if (mode == ZOOM) {
                    float newDist = spacing(event);
                    if (newDist > 10f) {
                        matrix.set(savedMatrix);
                        float scale = newDist / oldDist;
                        matrix.postScale(scale, scale, midPoint.x, midPoint.y);
                    }
                }
                break;

            case MotionEvent.ACTION_POINTER_DOWN:
                oldDist = spacing(event);
                if (oldDist > 10f) {
                    savedMatrix.set(matrix);
                    midPoint(midPoint, event);
                    mode = ZOOM;
                }
                break;
            }
            imageView.setImageMatrix(matrix);
        }
        return true;
    }

    @SuppressLint("FloatMath")
    private float spacing(MotionEvent event) {
        float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return (float) Math.sqrt(x * x + y * y);
    }

    private void midPoint(PointF point, MotionEvent event) {
        float x = event.getX(0) + event.getX(1);
        float y = event.getY(0) + event.getY(1);
        point.set(x / 2, y / 2);
    }

private class SingleTapConfirm extends SimpleOnGestureListener {

        @Override
        public boolean onSingleTapUp(MotionEvent event) {
            return true;
        }
    }