Объединение BeautifulSoup и JSON в один выход - PullRequest
0 голосов
/ 08 июля 2019

Я, вероятно, плохо объяснил свой вопрос, но так как он для меня новый ... В любом случае, мне нужно объединить эти две части кода.

Я могу заставить БС работать, но он использует неправильное изображение. Чтобы получить правильные поля и правильное изображение, мне нужно проанализировать часть сайта json, и поэтому BS не будет работать.

Разбор json здесь

import json
import urllib
import requests
import re

r    = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
data = json.loads(r.read().decode('utf-8'))

for post in data['posts']:
    print post['episodeNumber']
    print post['title']
    print post['audioSource']
    print post['image']['medium']
    print post['content']

И замените часть try / BS здесь:

def get_playable_podcast(soup):
"""
@param: parsed html page            
"""
subjects = []

for content in soup.find_all('item'):

    try:        
        link = content.find('enclosure')
        link = link.get('url')
        print "\n\nLink: ", link

        title = content.find('title')
        title = title.get_text()

        desc = content.find('itunes:subtitle')
        desc = desc.get_text()

        thumbnail = content.find('itunes:image')
        thumbnail = thumbnail.get('href')

    except AttributeError:
        continue

    item = {
            'url': link,
            'title': title,
            'desc': desc,
            'thumbnail': thumbnail
    }

subjects.append(item)

return subjects

def compile_playable_podcast(playable_podcast):
    """
    @para: list containing dict of key/values pairs for playable podcasts
    """
    items = []

    for podcast in playable_podcast:
        items.append({
            'label': podcast['title'],
            'thumbnail': podcast['thumbnail'],
            'path': podcast['url'],
            'info': podcast['desc'],
            'is_playable': True,
    })

    return items

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

Error Type: <type 'exceptions.NameError'>
Error Contents: name 'title' is not defined
Traceback (most recent call last):
File ".../addon.py", line 6, in <module>
from resources.lib import thisiscriminal    
File "....resources/lib/thisiscriminal.py", line 132, in <module>
'title': title,
NameError: name 'title' is not defined

1 Ответ

0 голосов
/ 08 июля 2019

Ваш запрос JSON должен содержать всю необходимую информацию. Вы должны напечатать json_data, посмотреть, что возвращается, и решить, какие детали вам нужны.

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

import requests

r = requests.get('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
json_data = r.json()
items = []

for post in json_data['posts']:
    items.append([
        post['title'].encode('utf-8'), 
        post['image']['thumb'],
        post['excerpt']['long'],
        post['permalink'],
        ])

for item in items:
    print item

Это даст вам вывод, начиная с:

['Stowaway', u'https://thisiscriminal.com/wp-content/uploads/2019/07/Stowaway_art-150x150.png', u'One day in 1969, Paulette Cooper decided to see what she could get away with.', u'https://thisiscriminal.com/episode-118-stowaway-7-5-2019/']
['The Lake', u'https://thisiscriminal.com/wp-content/uploads/2019/06/Lake_art-150x150.png', u'Amanda Hamm and her boyfriend Maurice LaGrone drove to Clinton Lake one night in 2003. The next day, DeWitt County Sheriff Roger Massey told a local newspaper, \u201cWe don\u2019t want to blow this up into something that it\u2019s not. But on the other side, we\u2019ve got three children...', u'https://thisiscriminal.com/episode-117-the-lake-6-21-2019/']
['Jessica and the Bunny Ranch', u'https://thisiscriminal.com/wp-content/uploads/2019/06/Bunny_art-150x150.png', u'In our\xa0last episode\xa0we spoke Cecilia Gentili, a trans Latina who worked for many years as an undocumented sex worker. Today, we get two more views of sex work in America. We speak with a high-end escort in New York City, and take a trip to one of the...', u'https://thisiscriminal.com/episode-116-jessica-and-the-bunny-ranch-6-7-2019/']
...