Я написал функцию, которая берет код из элемента сценария сайтов, разбивает символы, добавляет двойные кавычки к клавишам с помощью замены строки, а возвращаемое - это то, что я считал словарем. но я не могу вытащить из него значения. Я попытался получить доступ к значениям, выполнивЯ не могу получить доступ к словарю в моем коде на Python
results['file']
И это не сработало. Я получил сообщение об ошибке, говорящее, что-то вроде
it expected a number and instead got a string.
я попытался
results[0]
и все, что было возвращено
{
Я также попытался
results.file
и это не сработало , Таким образом, в то время как прибегая к помощи и исследования питона книг, которые я видел функцию значения используются в словаре как этот
dict.values()
, но когда я попробовал это я получил
'str' object has no attribute 'values'
Heres мой код для моей функции
def panties():
pan_url = 'http://www.panvideos.com'
html = requests.get(pan_url, headers=headers)
soup = BeautifulSoup(html.text, 'html5lib')
video_row = soup.find_all('div', {'class': 'video'})
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('div', {'class': 'video-player'})
entries = [{'text': str(div),
} for div in video_row][3]['text']
oldstring = str(entries)
removed = '<script type="text/javascript">jwplayer("video-setup").setup('
newstring = oldstring.replace(removed, "")
removed_two = ');</script>'
newstring_two = newstring.replace(removed_two, "")
#Allows for multiple string replacement
rdict = {
'file': '"file"',
'image': '"image"',
'primary': '"primary"',
'stretching': '"stretching"',
'width': '"width"',
'aspectratio': '"aspectratio"',
'autostart': '"autostart"',
'logo': '"logo"',
'position': '"position"',
# 'link': '"link"',
'sharing': '"sharing"',
}
robj = re.compile('|'.join(rdict.keys()))
result = robj.sub(lambda m: rdict[m.group(0)], newstring_two)
parsed_json = json.loads(json.dumps(result))
soc = parsed_json.replace('link', ' "link" ', 2)
return soc
и вот что она возвращает
{"file":"http://www.youtube.com/watch?v=slCSLeZueI4",
"image":"http://i1.ytimg.com/vi/slCSLeZueI4/maxresdefault.jpg",
"primary":"html5",
"stretching":"fill",
"controlbar":"bottom",
"width":"100%",
"aspectratio":"16:9",
"autostart":"true",
"logo":{
"file":"http://www.panvideos.com/uploads/bien-png578aab16676e1.png",
"position":"bottom-right",
"link" :"http://www.panvideos.com/"},
"sharing":{
"link" :"http://www.panvideos.com/video/3178/la-nina-y-el-lobo-video-oficial/","sites":
["facebook","twitter","linkedin","pinterest","tumblr","googleplus","reddit"]}}
Я протестировал его в валидаторе json, он имеет двойные кавычки, такие как json, он заключен в фигурные скобки. Какой правильный синтаксис для этой работы. также это в приложении django. Я ставлю, что просто быть полным и только в случае, если это делает разницу
EDIT: мой views.py
pan = panties()
context = {
'pan': pan,
}
и в моем шаблоне
{% for p in pan %}
Title: {{p.text}}<br>
Href: {{p.href}}<br>
Tube: {{p.tube}}<hr>
{% endfor %}
показать код, называющий эту функцию? Вы уверены, что положили возвращаемое значение в результатах? –
Есть некоторые вещи, которые вы можете сделать, чтобы сузить это - ваш ' [] 'направо - и ваше сообщение об ошибке подсказывает, что, по вашему мнению, словарь является фактически строкой, ... –
@ TonySuffolk66 благодарит за ответ , Если я пытаюсь использовать json.loads, я получаю это сообщение об ошибке «Ожидание», «разделитель: строка 1 столбец 436 (char 435)» – losee