2017-02-19 3 views
0

Я пытаюсь написать небольшой скрипт в Python, чтобы помочь мне в некоторых более утомительных частях моей работы. Я написал это:Beautiful Soup NoneType error

from bs4 import BeautifulSoup 
import lxml 
import os 
import sys 

questid = "1478" 
soup = BeautifulSoup(open("Data/xmls/quests.xml"), "lxml") 

for quest in soup.find_all('quest', {"id":questid}): 
    print(quest) 
    questSoup = BeautifulSoup(quest) 
    for floor in questSoup.find_all('location_id'): 
     print(floor) 

Что это должно сделать, чтобы получить часть огромного XML под названием «квесты», на основе тега - и его атрибут - «идентификатор». Затем он должен сделать новый суп из этой части и получить все теги изнутри. Пока, прежде чем я выясню, какие квесты квеста я хочу выбрать (и как я буду обрабатывать ввод), я просто закодировал один («1478»).

Сценарий до сих пор печатает квест, но не создает из него новый суп.

Возможно ли, что переменная квеста не является строкой? Или я делаю что-то неправильно?

ответ

0
for quest in soup.find_all('quest', {"id":questid}): 
    print(quest) 
    # questSoup = BeautifulSoup(quest) 
    for floor in quest.find_all('location_id'): 
     print(floor) 

Нет необходимости строить новый объект soup из tag объекта, вы можете использовать find_all на них обоих, так как оба являются судоходными строками, так что они ведут себя таким же образом и могут быть доступны таким же образом.

На мой взгляд, soup объект специальный tag объект, который называется document


import requests, bs4 

r =requests.get('http://www.google.com') 
soup = bs4.BeautifulSoup(r.text, 'lxml') 
soup.name 

из:

'[document]' 
Смежные вопросы