
Доброго дня! Делаю парсер для личных нужд и учусь программировать потихоньку.
Идея такая, вставляю из экселя список ссылок на сайты (они однообразны), ну например market.yandex.ru — есть 10-20 ссылок. Как в питоне обозначить этот список? я бы хотел его вводить в какой то texteditor, в окне Qt, далее нажимаю парсим — и программа загружает нужные странички.
.py парсер тут
http://pastebin.ru/RjDPll8T
Qt интерфейс для него тут:
http://pastebin.com/mG7Kxbtp
2Answers

Еще может заинтересовать:

Самый простой вариант: используйте QPlainTextEdit
для хранения списка url
— каждый url на своей строке. При нажатии на кнопку, получаете текст из редактора, разделяете его по символу перевода на следующую строку '\n'
и обрабатываете url:
for url in self.ui.urls_text_edit.toPlainText().split('\n'): # Удаление пустых символов с края строки url = url.strip() # Если строка пустая if not url: continue seld.do_parse(url)
Для парсинга сайтов нужно что-то для скачивания страницы по url
и что-то для вытаскивания информации со скаченной страницы, это может быть простой поиск по тексту, или поиск с помощью регулярных выражений, или разбор страницы как xml (html) и получения данных использую sax
, dom
, css-селекторы
, или xpath
.Css-селекторы
и xpath
выражения по сути одно и тоже — ими описывается какие объекты из страницы html хотим получить.
Рекомендую, использовать xml-парсер с xpath
запросами, вот пример скрипта для вытаскивания меток ru.stackoverflow
с первой страницы. В g.doc.select
описывается xpath
выражения для получения ссылок на метки:
import grab g = grab.Grab() url = 'http://ru.stackoverflow.com/tags?tab=name' g.go(url) for a in g.doc.select('//a[@class="post-tag"]'): tag = a.text() print(tag)
Опишу наиболее частые инструменты.
Для скачивания страниц: стандартный urllib
или requests
.
Для парсинга: lxml
, beautifulsoup
или grab
.
Иногда, на некоторых сайтах, на которых активно используются скрипты, парсить описанным выше способом не получится, и тогда я использую движок Webkit
, входящий в Qt
как модуль QWebKit
. Кстати, в нем поиск происходит с помощью css-селекторов
, они по проще xpath
. В этом примере заходим на страницу ru.stackoverflow
и получаем текст с label:
from PySide.QtWebKit import * from PySide.QtCore import * from PySide.QtGui import * import sys app = QApplication(sys.argv) view = QWebView() view.show() view.load('https://ru.stackoverflow.com/users/login') # Ждем пока прогрузится страница loop = QEventLoop() view.loadFinished.connect(loop.quit) loop.exec_() doc = view.page().mainFrame().documentElement() print(doc.findFirst('label[for="email"]').toPlainText()) print(doc.findFirst('label[for="password"]').toPlainText()) sys.exit(app.exec_())
Ссылки на некоторые мои скрипты для парсинга:
- Один из первых скриптов для парсинга страницы с порно-сайта и
получения ссылки на видео - Скрипт для вытаскивания адресов прокси с сайта hideme.ru
- Бот веб-игры, написанный на
python
/Qt
. Парсинг и
взаимодействие сделано черезQWebKit
. - Некоторый набор скриптов для парсинга, используя
grab

Для начинающих (как я), всем рекомендую посмотреть вот этот урок https://www.youtube.com/watch?v=BBDwd32Vwtg он весьма подробно объясняет как сделать парсер страниц (страницу директории и подстраницы), а так же выгрузить все это дело в Excel. Удобно так как все это в одном месте. Смотря обрывки уроков по парсингу от «ведущих» западных коллег — к сожалению собрать все в одну программу для новичков как я тяжело, без должной базы знаний.