LINUX.ORG.RU

lxml or bs4

 , ,


1

2

Наткнулся на мнение, что чистый lxml лучше чем bs4 + lxml. Стало интересно как работать с чистым xml файлом в первом и втором случае. Набросал 2 функции, которые делают одно и то же, но в случае с lxml у меня есть подозрение, что я делаю что-то не так. Гуру питона и парсинга xml, объясните, где я неправ?

import requests
from lxml import etree
from bs4 import BeautifulSoup

url = 'https://www.coursera.org/sitemap~www~courses.xml'
response = requests.get(url)


def lxml_method(xml):
    root = etree.fromstring(xml)
    ns = '{' + root.nsmap[None] + '}'
    elements = root.findall('.//' + ns + 'loc')
    links = [link.text for link in elements]
    return links


def bs4_method(xml):
    soup = BeautifulSoup(response.content, 'lxml')
    elements = soup.findAll('loc')
    links = [link.text for link in elements]
    return links
P.S. да, мне просто нужны все ссылки из этого файла.

Перемещено beastie из general

Можно так, нопремер (питон3)

from urllib.request import urlopen
from lxml import etree

url = 'https://www.coursera.org/sitemap~www~courses.xml'
xb = urlopen(url).read()

def links_g(xml):
    root = etree.fromstring(xml)
    yield from (loc.text for loc in root.iter('{*}loc'))

for l in links_g(xb):
    print(l)
anonymous
()

Сейчас уже подзабыл эту тему, но когда выбирал, то выбрал суп. lxml чуток быстрее, там где скорость была критична, брал lxml.

GoNaX ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.