Я пытаюсь выучить Python, и на самом деле я чувствую, что «выучить Python - трудный путь», «байт Python» и «Head First Python» - действительно хорошие книги. Однако - теперь, когда я хочу начать «настоящий» проект, lxml заставляет меня чувствовать себя полным мерзавцем.
Это то, что я хотел бы сделать (цели)
Я пытаюсь разобрать в газетных сайтах статью о политике
URL-адрес http://politiken.dk/politik/
Окончательный проект должен
- 1) посещение каждый день (может каждый час)
вышеуказанный URL
- 2) для каждого соответствующего
статья, я хочу сохранить ссылку на
база данных. Соответствующие статьи
в
<div class="w460 section_forside
sec-forside">
. Некоторые элементы имеют изображения, некоторые
не делает.
Я хотел бы сохранить следующее:
- a - заголовок (
<h1 class="top-art-header fs-26">
)
- b - подзаголовок (
<p class="subheader-art">
)
c - если элемент имеет соответствующий img, то атрибут «alt» или «title»
3) посетите каждый соответствующий URL, очистите тело статьи и сохраните его в базе данных.
- 4) если каждый соответствующий URL уже находится в базе данных, я пропускаю этот URL (соответствующие статьи, как определено выше, всегда являются последними 10 опубликованными)
Желаемым результатом должна быть таблица базы данных с полями:
- art.i) ID
- art.ii) URL
- art.iii) заголовок
- art.iiii) подзаголовок
- art.iiiii) img alt
- art.iiiiii) статья тела.
- art.iiiiiii) дата и время (строка расположена в
<span class="date tr-upper m-top-2">
)
Выше я хотел бы помочь с помощью вышесказанного. Поскольку очистка экрана не всегда благоприятна, я хотел бы объяснить , почему я хочу это сделать .
В основном я хочу получить данные для случаев
члены парламента или политических партий. Я не буду публиковать статьи, продавать данные или что-то подобное (я не проверял законность своего подхода, но надеюсь и считаю, что он должен быть законным)
Я думаю, у меня есть стол политиков и стол политических партий.
для каждого политика у меня будет:
- pol.i) ID
- pol.ii) first_name
- pol.iii) имя_урю
- pol.iiii) партия
Для каждой политической партии у меня будет:
- party.i) ID
- party.ii) правильное имя
- party.iii) вызывающее имя
-party.iiii) сокращение
Я хочу сделать это для нескольких датских газетных сайтов, а затем проанализировать, если одна газета
дает предпочтения некоторым политикам / партиям - просто на основе количества упоминаний.
Мне также понадобится помощь, но по одному шагу за раз: -)
Позже я хотел бы изучить NLTK и возможности майнинга настроений.
Я хочу посмотреть, может ли это превратиться в доктора философии. проект в области политологии / журналистики.
Это в основном то, что у меня есть (т.е. ничего)
Мне действительно тяжело оборачиваться вокруг lxml, концепции элементов, различных синтаксических анализов и т. Д. Я, конечно, читал учебные пособия, но я все еще очень застрял.
import lxml.html
url = "http://politiken.dk/politik/"
root = lxml.html.parse(url).getroot()
# this should retur return all the relevant elements
# does not work:
#relevant = root.cssselect("divi.w460 section_forside sec-forside") # the class has spaces in the name - but I can't seem to escape them?
# this will return all the linked artikles headlines
artikler = root.cssselect("h1.top-art-header")
# narrowing down, we use the same call to get just the URLs of the articles that we have already retrieved
# theese urls we will later mine, and subsequently skip
retrived_urls=[]
for a in root.cssselect("h1.top-art-header a"):
retrived_urls.append(a)
# this works.
Что я надеюсь получить от ответов
Во-первых, если вы не называете меня (очень плохими) именами, я буду и впредь счастлив.
- Но я очень надеюсь, что это простое объяснение того, как работает lxml. Если бы я знал, какие инструменты использовать для вышеперечисленных задач, мне было бы намного проще «погрузиться в lxml». Может быть, из-за моего небольшого объема внимания я в настоящее время разочаровываюсь, когда читаю вещи, которые намного выше моего уровня понимания, когда я даже не уверен, что смотрю в нужном месте.
- Если бы вы могли предоставить пример кода, который подходит для некоторых задач, это было бы действительно здорово. Я надеюсь превратить этот проект в докторскую диссертацию. но я уверен, что такого рода вещи должны были быть сделаны уже тысячу раз? Если да, то, по моему опыту, учиться у других - отличный способ стать умнее.
- Если вы сильно чувствуете, что я должен забыть об lxml и использовать, например. scrapy или html5lib, тогда, пожалуйста, скажите так :-) Я начал изучать html5lib, потому что Дрю Конуэй в своем блоге предлагает об инструментах python для политолога, но я не смог найти никакого материала начального уровня. Alsp lxml - это то, что рекомендуют хорошие люди из scraperwiki. Что касается скрапинга, это может быть лучшим решением, но я боюсь, что скрапирование во многом является основой - как таковой действительно хорошо, если вы знаете, что делаете, и хотите сделать это быстро, но, возможно, не лучший способ изучите магию питона.
- Я планирую использовать реляционную базу данных, но если вы думаете, например, Монго будет преимуществом, я поменяю свои планы.
- Поскольку я не могу установить import lxml в python 3.1, я использую 2.6. Если это не так - скажите, пожалуйста, тоже.
Сроки
Я задал кучу вопросов для начинающих по stackoverflow. Слишком много, чтобы гордиться. Но с более чем полной работой я, кажется, никогда не смогу погрузиться в код и просто впитать навыки, которых я так жажду. Я надеюсь, что это будет вопрос / ответ, к которому я могу вернуться, чтобы регулярно обновлять то, что я узнал, и заново изучать то, что я забыл. Это также означает, что этот вопрос, скорее всего, будет оставаться активным в течение достаточно долгого времени. Но я буду комментировать каждый ответ, который мне посчастливится получить, и я буду постоянно обновлять раздел «что я получил».
В настоящее время я чувствую, что, возможно, откусил больше, чем смогу пережевывать - так что теперь он вернулся к «головой первого питона» и «изучению питона трудным путем».
Заключительные слова
Если вы зашли так далеко - вы удивительны - даже если вы не отвечаете на вопрос. Теперь вы прочитали много простых, запутанных и глупых вопросов (я горжусь тем, что задаю свои вопросы, поэтому не спорьте). Вы должны взять кофе и дым без фильтра и поздравить себя: -)
Счастливых праздников (в Дании мы празднуем Пасху, и в настоящее время солнце светит как бумажник Самуала Джексона в художественной литературе)
Изменение в
Кажется, прекрасный суп - хороший выбор. Однако, по словам разработчика, BeautifulSoup не очень хороший выбор, если я хочу использовать python3. Но согласно this я бы предпочел python3 (хотя и не сильно).
Я также обнаружил, что в главе "Погружение в python 3" есть глава lxml. Посмотрим на это тоже.