Я новичок в python и пишу здесь, так что любая помощь будет очень благодарна! Я пытаюсь использовать Beautiful Soup для динамического анализа более 30 различных RSS-каналов блога. что удивительно, но они не стандартные. Итак, я начал с создания списка всех потенциальных тегов xml, которые я хочу захватить, я назвал его заголовками:
headers = ['title', 'description', 'author', 'credit', 'pubDate', 'link', 'origLink']
, затем я взял все теги из RSS-канала, который пытаюсь очистить и поместить их в свой собственный список с именем tags:
import requests
from bs4 import BeautifulSoup as bs
requests.packages.urllib3.disable_warnings()
headers = ['title', 'description', 'author', 'credit', 'pubDate', 'link', 'origLink']
url = 'https://www.zdnet.com/blog/security/rss.xml'
resp = requests.get(url, verify=False)
soup = bs(resp.text, features='xml')
data = soup.find_all('item')
tags = [tag.name for tag in data[0].find_all()]
print(tags)
, затем я создаю новый список тегов n_tags с перекрытием элементов в обоих списках:
n_tags = [i for i in headers if i in tags]
print(n_tags)
затем я перебираю все элементы данных (все сообщения в блоге на странице) и перебираю все элементы в моем списке новых тегов (все теги, относящиеся к этому блогу). Я застрял там, где n_tags - это список строк, а не объекты супа.
ручной способ синтаксического анализа фида:
for item in data:
print(item.title.text)
print(item.description.text)
print(item.pubDate.text)
print(item.credit.text)
print(item.link.text)
Однако я хочу перебрать список теги и вставьте их в код, чтобы получить содержимое тега xml.
for item in data:
for el in n_tags:
content = item + "." + el + ".text"
print(content)
это возвращает ошибку:
TypeError: unsupported operand type(s) for +: 'Tag' and 'str'
Мне нужно повернуть строку из списка в объект «Tag» супа, чтобы я мог объединить их. Я попытался преобразовать объект Tag в строку и восстановить всю строку как объект супа, но это не сработало. Ошибка не возникла, она просто вернула None
content = str(item) + "." + el + ".text"
print(soup.content)
самое близкое, что я получил:
for item in data:
for el in n_tags:
content = str(item) + "." + el + ".text"
print(content)
, он действительно возвращает контент, но это не то, что я ищу , ".text", похоже, не применяется, и для каждого элемента в списке содержимое сообщения блога повторяется.
Идеи закончились, спасибо за чтение. дайте мне знать, если у вас возникнут вопросы.