Найти - Пользователи
Полная версия: Парсинг Википедии с помощью LXML
Начало » Python для новичков » Парсинг Википедии с помощью LXML
1 2
shau-kote
Всем доброго времени суток.

Понадобилось мне вытащить из Википедии, а конкретно из этой её страницы ссылки на все статьи, которые там собраны (как содержимое категории).

Погуглив, я решил использовать для этого 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')

Увы, эффект от его выполнения был вполне так нулевой.
Буду признателен, если более опытные форумчане подскажут мне мои ошибки.

З.Ы. Учитывая, что проблема косвенно связана с выполнением практикума в университете, возможно, модераторы сочтут более подходящим перенести тему в “Центр помощи”.
s0rg
попробуйте убрать tbody из xpath'а
shau-kote
Неа. Результат тот же.
GaiveR
Браузеры генерят плохой 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'))

P.S. если планируешь заниматься парсингом, присмотрись к grab
sanodin
Есть оффлайн база википедии и есть там база кажется и в xml формате…так для сведения…
она весит многовато…
lorien
Как правильно парсить с помощью xpath:
* прочитать мануал по xpath, выучить xpath
* profit!

Как парсить неправильно с помощью xpath:
* не читать мануалов по xpath
* использовать магические xpath, сгенерированные кем-то, например, браузером
* задавать вопросы на форумах типа, я не знаю xpath, почему у меня ничего не работает
shau-kote
GaiveR, спасибо.
Не могли бы прокомментировать фразу “Браузеры генерят плохой XPath. ”?
Насколько я понимаю, XPath - это фактически путь в дереве XML-документа, т.е. он определяется структурой документа и только, разве нет?
GaiveR
shau-kote
Насколько я понимаю, XPath - это фактически путь в дереве XML-документа, т.е. он определяется структурой документа и только, разве нет?
XPath -> XML Path Language -> язык запросов к элементам XML-документа. Т.е. это не просто путь, это язык запросов.

Вообще lorien правильно говорит, надо почитать доки по xpath и не знать бед. Но у меня самого руки не доходят :)
shau-kote
Ну я прочитал статью в Википедии и несколько статей по самому lxml. Полагаю, этого достаточно для краткого ликбеза.
lorien
> Ну я прочитал статью в Википедии и несколько статей по самому lxml. Полагаю, этого достаточно для краткого ликбеза.

Вам нужно понять, что такое решение проблемы. Есть сложная проблема, разбиваете её на мелкие под-проблеммы. Например, у вас длинный xpath, он не работает, отсеките большую часть, убедитесь что xpath находит вершину пути, далее добавляйте xpath по кусочкам, пока он не перестанет работать. Проанализируйте это место и вы найдёте решение.

Этот паттерн решения проблемы применим к практически любой проблеме. И вам предстоит им пользоваться бесчиленное количество раз, если вы решили заниматься программированием.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB