Форум сайта python.su
0
Всем доброго времени суток.
Понадобилось мне вытащить из Википедии, а конкретно из этой её страницы ссылки на все статьи, которые там собраны (как содержимое категории).
Погуглив, я решил использовать для этого LXML, а в качестве опоры взял данную статью на Хабре. Вытащив XPath FireBug'ом, я написал следующий код:
import urllib import lxml.html page = urllib.urlopen(<ссылка на страницу>) doc = lxml.html.document_fromstring(page.read()) for topic in doc.xpath('/html/body/div[3]/div[3]/div[4]/div[2]/div/div/table/tbody/tr/td/ul/li'): a = topic.xpath('/a') print a.get('href')
Отредактировано shau-kote (Фев. 17, 2013 14:03:49)
Офлайн
25
попробуйте убрать tbody из xpath'а
Офлайн
0
Неа. Результат тот же. 
Офлайн
16
Браузеры генерят плохой XPath.
Я сам не много с XPath работал, так что за качество не ручаюсь, но такой вариант работает:
import requests import lxml.html resp = requests.get('http://ru.wikipedia.org/wiki/Категория:Животные_по_алфавиту') doc = lxml.html.document_fromstring(resp.text) links = doc.xpath('//*[@id="mw-pages"]//li[a]/a') for link in links: print(link.get('href'))
Отредактировано GaiveR (Фев. 17, 2013 15:23:59)
Офлайн
31
Есть оффлайн база википедии и есть там база кажется и в xml формате…так для сведения…
она весит многовато…
Офлайн
Как правильно парсить с помощью xpath:
* прочитать мануал по xpath, выучить xpath
* profit!
Как парсить неправильно с помощью xpath:
* не читать мануалов по xpath
* использовать магические xpath, сгенерированные кем-то, например, браузером
* задавать вопросы на форумах типа, я не знаю xpath, почему у меня ничего не работает
Офлайн
0
GaiveR, спасибо.
Не могли бы прокомментировать фразу “Браузеры генерят плохой XPath. ”?
Насколько я понимаю, XPath - это фактически путь в дереве XML-документа, т.е. он определяется структурой документа и только, разве нет?
Отредактировано shau-kote (Фев. 18, 2013 05:46:37)
Офлайн
16
shau-koteXPath -> XML Path Language -> язык запросов к элементам XML-документа. Т.е. это не просто путь, это язык запросов.
Насколько я понимаю, XPath - это фактически путь в дереве XML-документа, т.е. он определяется структурой документа и только, разве нет?
Офлайн
0
Ну я прочитал статью в Википедии и несколько статей по самому lxml. Полагаю, этого достаточно для краткого ликбеза.
Офлайн
> Ну я прочитал статью в Википедии и несколько статей по самому lxml. Полагаю, этого достаточно для краткого ликбеза.
Вам нужно понять, что такое решение проблемы. Есть сложная проблема, разбиваете её на мелкие под-проблеммы. Например, у вас длинный xpath, он не работает, отсеките большую часть, убедитесь что xpath находит вершину пути, далее добавляйте xpath по кусочкам, пока он не перестанет работать. Проанализируйте это место и вы найдёте решение.
Этот паттерн решения проблемы применим к практически любой проблеме. И вам предстоит им пользоваться бесчиленное количество раз, если вы решили заниматься программированием.
Офлайн