AttributeError: у объекта 'str' нет атрибута 'get', на самом деле это диктат - PullRequest
0 голосов
/ 22 сентября 2018

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

import requests, os
from urllib.parse import urlencode
from multiprocessing.pool import Pool
def get_page(offset):
    params = {
        'offset': offset,
        'format': 'json',
        'keyword': '街拍',
        'autoload': 'true',
        'count': '20',
        'cur_tab': '1'
    }
    url = 'http://www.toutiao.com/search_content/?' + urlencode(params)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
    except requests.ConnectionError:
        return None

def get_images(json):
    if json.get('data'):
        for item in json.get('data'):
            title = item.get('title')
            images = item.get('image_list')
            print('images type:', type(images))
            for image in images:
                print('image type:',type(image),image)
                http_url = 'http:' + image.get('url')
                results = {
                    'image': http_url,
                    'title': title
                }
                yield results
            # yield {'title': title}

def main(offset):
    json = get_page(offset)
    for item in get_images(json):
        print(item)

GROUP_START = 1
GROUP_END = 20
if __name__ == '__main__':
    pool = Pool()
    groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
    pool.map(main, groups)
    pool.close()
    pool.join()

снимок экрана с результатом после выполнения

1 Ответ

0 голосов
/ 22 сентября 2018

Если вы посмотрите на вывод, это не гарантирует, что image_list является словарем.

'image_list': ['http://abc.jpeg']

Вам необходимо правильно обработатьразличные сценарии.Если это список, просто обработайте его как список.

См. Этот пример

def get_images(json):
    if not json.get('data'):
        return
    for item in json.get('data'):
        title = item.get('title')
        images = item.get('image_list')

        if not images: # This can be None as well. If so, just skip.
            continue

        print('images type:', type(images))
        for image in images:
            if not image:
                continue
            print('image type:',type(image),image)
            if isinstance(image, dict):
                im = image.get('url')
            else:
                im = image[0] # You should probably iterate this list.
            http_url = 'http:' + im
            results = {
                'image': http_url,
                'title': title
            }
            yield results

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

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