Объект не имеет атрибута «Текст» - PullRequest
0 голосов
/ 24 января 2019

Хорошо, давайте попробуем это снова.Я очищаю веб-страницу в формате xml.Я собираю то, что мне нужно, но для одного элемента он не может вытащить текст (в моем коде он обозначен как «элемент»).Я получаю следующую ошибку: "item = items.find (" image: title "). Text AttributeError: у объекта 'NoneType' нет атрибута 'text' '. Я просто хотел бы получить текст для' item '.

Вот мой код:

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}

url = 'https://www.kith.com/sitemap_products_1.xml'

r = requests.get(url=url, headers=headers)

soup = BeautifulSoup(r.text, 'html.parser')

for items in soup.find_all("url"):
    item = items.find("image:title").text
    url = items.find("loc").text
    if item is not None:
        print(item, url)

Ответы [ 2 ]

0 голосов
/ 24 января 2019

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

for items in soup.find_all("url"):
getTitle = items.find('image:title')
if getTitle is not None:
    item = getTitle.text
    url = items.find("loc").text
    print (item,url)
0 голосов
/ 24 января 2019

В основном в этой строке:

item = items.find("image:title").text 

items.find("image:title") return None (вероятно, потому что find не находит того, что вы ожидаете в items).Итак, поскольку None не имеет атрибута text, тогда (None).text вызывает ошибку AttributeError: 'NoneType' object has no attribute 'text'

Если вы хотите исправить ошибку, вы можете сделать:

item = items.find("image:title")
if item:
    title = item.text     # you can use other variable name if you want to.
else:
    print("there is no image:title in items")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...