Найти - Пользователи
Полная версия: Спарсить данные с указанного url
Начало » Network » Спарсить данные с указанного url
1 2 3 4 5 6
vic57
зачем ты три раза открываешь/закрываешь броузер?
 #
from selenium import webdriver
from bs4 import BeautifulSoup as BS
def get_pages(urls):
    driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
    driver.set_window_size(0,0)
    for url in urls:
        driver.get(url)
        print pars(driver.page_source)
    driver.quit()
    
def pars(html):
    soup = BS(html, 'lxml')
    return soup.find('div', class_='info-date ng-binding ng-scope').text.strip()
if __name__ == '__main__':
    urls = ['http://bus.gov.ru/pub/agency/8968/tasks/3472492',
          'http://bus.gov.ru/pub/agency/8968/plans',
          'http://bus.gov.ru/pub/agency/8968/operations/'
          ]
    get_pages(urls)
Vigi
vic57
зачем ты три раза открываешь/закрываешь броузер?
а хз, сенькс.
vic57
SlimerJS качает эту страницу без ошибок. Гугл сказал что PhantomJS - движок WebKit (старый), SlimerJS - Gecko
Vigi
vic57
SlimerJS качает эту страницу без ошибок. Гугл сказал что PhantomJS - движок WebKit (старый), SlimerJS - Gecko
А можно по подробней как ее с питоном подружить. (пример) ?!
vic57
я сохранял контент в файл, как в примере с фантомом выше, а с файлом делай что хочешь. можно через subprocess, или os.system, тока лишний велосипед получается имхо
https://samael500.github.io/articles/python/ralli-na-brauzerakh/
 //get_page.js
var system = require('system');
if (system.args.length < 3 ) {
 console.log('No arguments');
 slimer.exit();
}
else {
 var url = system.args[1];
 var filename = system.args[2];
 var fs = require('fs');
 var page = require('webpage').create();
 page.open(url, function (status) {
   console.log(url,':',status);
//   if (status == 'success') fs.write(filename,page.plainText,'w');
   if (status == 'success') fs.write(filename,page.content,'w');
   slimer.exit();
 });
}
 slimerjs get_page.js 'http://example.com' 'example.html'
vic57
с точки зрения безопасности лучше
 //get_page.js
var system = require('system');
if (system.args.length < 2 ) {
 system.stderr.write('No arguments');
 slimer.exit();
}
else {
 var url = system.args[1];
 var page = require('webpage').create();
 page.open(url, function (status) {
   system.stderr.write(url,':',status);
   //if (status == 'success') system.stdout.write(page.plainText);
   if (status == 'success') system.stdout.write(page.content);
   slimer.exit();
 });
}
 slimerjs get_page.js 'http://example.com' > example.html
Vigi
vic57
я сохранял контент в файл, как в примере с фантомом выше, а с файлом делай что хочешь. можно через subprocess, или os.system, тока лишний велосипед получается имхо
https://samael500.github.io/articles/python/ralli-na-brauzerakh/
Спасибо за ссылку.

В общем старый код все - таки заставил нормально отрабатывать добавил в цикле проверку на нормальный ответ. и даже при использовании движка Chrome стал работать быстрей…
 from selenium import webdriver
from bs4 import BeautifulSoup as BS
def get_pages(urls):
    driver = webdriver.Chrome()
    driver.set_window_size(0, 0)
    driver.set_window_position(1000, 0)
    for url in urls:
        driver.get(url)
        while True:
            req = pars(driver.page_source)
            if req != '-':
                break
        print(req)
    driver.quit()
def pars(html):
    soup = BS(html, 'lxml')
    try:
        r = soup.find('div', class_='info-container info-container_np').find('div', class_='info-date ng-binding ng-scope').text.strip()
        return r
    except:
        try:
            r = soup.find('div', class_='info-date').find('span', class_='ng-binding ng-scope').text.strip()
            return r
        except:
            return '-'
if __name__ == '__main__':
    urls = ['http://bus.gov.ru/pub/agency/206030/tasks/3573224',
            'http://bus.gov.ru/pub/agency/206030/plans',
            'http://bus.gov.ru/pub/agency/206030/operations/',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-F0503721',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-F0503730',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-f0503737',
            'http://bus.gov.ru/pub/agency/206030/reports',
            'http://bus.gov.ru/pub/agency/206030/measures'
            ]
    get_pages(urls)
vic57
при использовании движка Chrome стал работать быстрей…
хром просто грузит быстрее фф, тока памяти жрет больше. метод имхо - против лома нет приема
у меня этот код 700 метров озу расходует.
для твоего случая можно проще
 #!/usr/bin/env python
# coding:utf-8
from subprocess import Popen,PIPE
def get_page(url):
    child = Popen(['/usr/local/bin/slimerjs','get_page.js',url],stdout=PIPE)
    child.wait()
    out = child.stdout.read().split('\n')
    for i in out:
        s = i.decode('utf-8')
        if u'Дата публикации' in s:
            print s
            break
if __name__ == '__main__':
    urls = ['http://bus.gov.ru/pub/agency/206030/tasks/3573224',
            'http://bus.gov.ru/pub/agency/206030/plans',
            'http://bus.gov.ru/pub/agency/206030/operations/',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-F0503721',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-F0503730',
            'http://bus.gov.ru/pub/agency/206030/annual-balances-f0503737',
            'http://bus.gov.ru/pub/agency/206030/reports',
            'http://bus.gov.ru/pub/agency/206030/measures'
            ]
    for url in urls: get_page(url)
 //get_page.js
'use strict'
var system = require('system');
if (system.args.length < 2 ) {
 console.log('No arguments');
 slimer.exit();
}
else {
 var url = system.args[1];
 var page = require('webpage').create();
 page.open(url, function (status) {
   if (status == 'success') console.log(page.plainText);
   slimer.exit();
 });
}
Vigi
vic57
хром просто грузит быстрее фф, тока памяти жрет больше. метод имхо - против лома нет приема
у меня этот код 700 метров озу расходует.
Согласен, способ в лоб но эффективный

vic57
для твоего случая можно проще
Ну скажем это был только частный случай…
а вообще сам проект вот Тут.
Да пока так, в сторону оптимизации не смотрел, + вывод данных пока тупо в txt - тоже под вопросом как нужно данные выгружать и тд.
vic57
Vigi
а вообще сам проект вот Тут.
статистика == базы данных
накопление, фильтрация, обработка
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