Когда я сканирую изображение из Google, изображение src включает None - PullRequest
1 голос
/ 21 сентября 2019

Прежде чем я начну задавать вопросы, я прошу прощения за то, что я учусь в корейской школе, поэтому мои вопросы могут быть трудными для чтения.

Я хочу, чтобы мой код печатал изображение, но при печати ничегоМне больше 22, поэтому я не могу загрузить изображение столько, сколько захочу.

Печатается так.Это изображение, когда я вставляю ключевое слово 'cat'.

20 https://encrypted -tbn0.gstatic.com / images? Q = tbn: ANd9GcQdMIU_4V4XtUAiV2uOBmeixkhQuy6N3eaHH1XuUzOYFyQZ * * 101 * 1011E1E0E0E0E01012 *https://encrypted -tbn0.gstatic.com / images? Q = tbn: ANd9GcQvmdG435HxyF0e1DP1IBVos10zTwuNJ0p9M_iYDzlYWup6AgfV6w

22 * ​​1016 * 1018htht0: htn5SQWzIpmDgBNvNaO

23 Нет

24 Нет

25 Нет

26 Нет

Я искал в Google около часа, но яне удалось найти ошибку (баг?) этого, поэтому я впервые задаю вопрос по stackoverflow

Я пропустил функцию с именем make_dir

import os
import shutil
import urllib.request
import time

from selenium import webdriver

def crawl(keyword, max_count):
    cnt = 0

    url = "https://www.google.co.in/search?q=" + keyword + "&tbm=isch"  # google search url with search word

    browser = webdriver.Chrome("C:\\Users\\Master\\Desktop\\crawling\\chromedriver.exe")  # webdriver
    browser.get(url)  # open web page

    img_list = browser.find_elements_by_class_name("rg_ic")  # find image


    for i, el in enumerate(img_list):
        if cnt >= max_count:
            break

        img = img_list[i]
        src = img.get_attribute('src')
        if src is None:
            print(i, src)  # img_list includes None so I need to fix it
            continue

        cnt += 1
        print(i, src)  # print src
        urllib.request.urlretrieve(src, str(cnt) + ".png")  # download image

    browser.quit()

if __name__ == "__main__":
    max_count = int(input("Number of crawls : "))
    keyword = input("Search word : ")

    make_dir()
    crawl(keyword, max_count)

Я сделал код для печати src.Он печатает src до тех пор, пока мне не исполнится 23 года, но когда ему больше 22, они печатают только Нет. Я хочу, чтобы они печатались правильно src

20 https://encrypted -tbn0.gstatic.com / images? Q = tbn: ANd9GcQdMIU_4V4XtUAiV2uOBmeixkhQuy6N3eaHH1XuUzOYFyQZBZefEg

21 https://encrypted -tbn0.gstatic.com / изображений д = ТБН: ANd9GcQvmdG435HxyF0e1DP1IBVos10zTwuNJ0p9M_iYDzlYWup6AgfV6w

22 * ​​1047 *https://encrypted -tbn0.gstatic.com / images? q = tbn: ANd9GcQL8NCMT9h7p8koWq3pgyhS8EebE9qh24e-5SQWzIpmDgBNvNaO

23 нет

24 * нет

10 * 1056 нет1058 *

1 Ответ

1 голос
/ 21 сентября 2019

Попробуйте это как функцию сканирования.Google использует отложенную загрузку, в результате чего ссылка на изображение становится значением атрибута data-src до тех пор, пока изображение не войдет в область просмотра.Я не тестировал фрагмент, но он должен работать

def crawl(keyword, max_count):
    cnt = 0

    url = "https://www.google.co.in/search?q=" + keyword + "&tbm=isch"  # google search url with search word

    browser = webdriver.Chrome("C:\\Users\\Master\\Desktop\\crawling\\chromedriver.exe")  # webdriver
    browser.get(url)  # open web page

    img_list = browser.find_elements_by_class_name("rg_ic")  # find image


    for i, el in enumerate(img_list):
        if cnt >= max_count:
            break

        img = img_list[i]
        src = img.get_attribute('src')
        if src is None:
            src = img.get_attribute('data-src')
            if src is None:
                continue


        cnt += 1
        print(i, src)  # print src
        if src[0]=='h':
            urllib.request.urlretrieve(src, str(cnt) + ".png")
        else:
            with open(str(cnt) + ".png", "wb") as fh:

                print(src[23:])
                fh.write(base64.b64decode(src[22:]))

    browser.quit()

Код использует некоторые уродливые хаки, такие как if src [0] == 'h' и используется только для целей представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...