С помощью питона выкачать сайт. Или ещё как-то.

Livonika

Даже не знаю, как такое загуглить.
Есть такая база http://www.rts-tender.ru/register/suppliers
На сайте разбита по страничкам по 10 записей. А мне нужна вся база. Когда щёлаешь по страничкам, то адрес не меняется. Как обратиться к определённой странице? Например, из скрипта на питоне или как-то ещё.
Вот есть ещё такая площадка http://www.roseltorg.ru/trade/suppliers-registry/
Для неё я написал скриптик на питоне, в котором генерил url с указаним номера страницы, и выкачал очень просто в цикле всё добро. А с той вообще не понимаю, как быть.

doublemother

Что мешает просто перебрать и выкачать все страницы вида
http://www.rts-tender.ru/register/suppliers/${NNNN}
где ${NNNN} — порядковый номер?

Livonika

Не догадался. Не щёлкнул ни по одной. Спасибо :D

Werdna

Даже не знаю, как такое загуглить.
Если хочешь, можешь мою сишную либу заюзать:
http://github.com//multcher
Она умеет сразу жрать урлы, в том числе и в процессе скачивания. Умеет учитывать роботс.тхт, умеет "не заябывать", т.е. ты там можешь лимитировать число запросов в секунду и число параллельных. Ну и она конечно понимает редиректы и вообще, она — болванка, что хочешь из неё можешь выпилить.
Там уже готовая прога тестовая есть, могу дать ещё парсер (он не опенсорс), который ссылки будет выдавать легко.

Yulka-MOl

http://www.commandlinefu.com/commands/view/901/download-an-e...
 
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com

pilot

Очередной велосипед от пианиста :grin:

Werdna

Очередной велосипед
Пруф или слив защитан.
Условия:
1. Качать сайты, урлы пусть заданы в файле, 100М или вообще идут потоком.
2. Сайты нельзя задрачивать, причем понятие "что есть задрачивать" — для разных сайтов разное: профили ВК если качать раз в 10 секунд, то совсем уныло будет, там можно и 10-15 в секунду качать.
3. Параллельно качать с дофига откуда, число соединений к разный айпишникам — тысячи.
4. Упереться в канал 1 гигабит и чтобы оставались ресурсы на парсинг-шмарсинг, т.е. на саму выкачку тратить минимум.
Покажешь готовое решение? Или просто сольешься?

Jackill

Можно так:

#! /usr/bin/python -Wall

from selenium import webdriver
from time import sleep

browser = webdriver.Firefox()
browser.get("http://rts-tender.ru/register/suppliers");
f = open("page.html", "w")
f.write(browser.page_source.encode('utf8'))
f.close()


for p in range(10):
sleep(2)
nextPage = browser.find_element_by_xpath('//*[@id="dnn_ctr956_View_rptPager_lnkPage_%d"]' % int(p))
nextPage.click()
f = open("page%d.html" % int(p), "w")
f.write(browser.page_source.encode('utf8'))
f.close()

broser.close()

Конечно, код можно совершенствовать, но по крайней мере по страницам он ходит.
xpath ищется с помощью Developer Tools (во вкладке Elements).
Там на самом деле больше 10 страниц, поэтому после 10й страницы нужно будет придумывать логику как вычислять xpath следующей, но это должно быть просто.
А, да: гуглить нужно "scrape web site"

YUAL

Покажешь готовое решение?
aria2 - без проблем у меня качало гигабит на виртуалке по списку ~150к урлов со ~100 разных серверов. файлы были не маленькие. не умеет правда рандомные задержки перед запросами.
есть mget от одного из разработчиков вгета. ни разу не тестил, но по описанию должен уметь всё что тебе требуется кроме чтения списка урлов из потока. причём он хочет эту фичу просто руки не дошли так что проще наверное сделать ему свистелку, чем пилить свою библиотеку с нуля.

psm-home

А, да: гуглить нужно "scam web site"
scrape м. б?

Jackill

scrape м. б?

Точно! Это меня в 2 часа ночи попутало :)

YUAL

Там больше половины на джабе - пианист не зачтёт. И как минимум половина оставшегося не удовлетворяет его требованиям. Остальное - хз.

Werdna

top-50
Наебка здесь.
Ты сейчас пытаешься отмазаться, типа, вот 50 краулеров. А на мой список фичей ты смотрел?
Вот вижу я там wget чуть ни первым, а он вообще не обладает перечисленными фичами.
Вот потому ты и пиздун блаблаблашечка.

pilot

Не, наебка там где ты забыл задачу ТС и изобрел свои фичи.
Так и родятся велосипедыпианины - вместо конфига или модуля к существующему краулеру гений выдумывает свой новый краулер, в котором этот модуль встроен по умолчанию. :p

yroslavasako

А на мой список фичей ты смотрел?
Это список не для краулера, а для загрузчика. По идее его может использовать как бекенд любой краулер. Если реализовывать совместимо, конечно.
Оставить комментарий
Имя или ник:
Комментарий: