Что такое блогосфера рунета сегодня. Можете со мной не согласиться, но на мой взгляд 80% того, что люди понимают под словом «блогосфера» — в рунете помещается в Живом Журнале. Да, Яндекс индексирует большое количество блоговых площадок, тут есть и LiveInternet и diary.ru и блоги на mail.ru тоже есть. И много чего еще. Но попробуйте припомнить, когда вы читали что-то интересное, достойное внимания на блоге из LiveInternet? А вообще что-нибудь на блогах mail.ru?
Известное дело, в Живом Журнале бал правят тысячники (а в последнее время уже десятитысячники).
Давайте посмотрим поближе, кто же они такие, топовые блогеры рунета?
На скорую руку я набросал робота, который ходил в профиль к тысяче блогеров, первых по критерию «в друзьях у», согласно
рейтингу LiveJournal. Есть еще так называемый рейтинг авторитетности Яндекса, но давайте не будем сегодня о грустном.
Робот собирал личные данные и аккуратно складывал их в общую кучу. Код робота писался на C#, не буду утомлять излишними техническими подробностями, все довольно просто и прямолинейно – зашел на страничку, пропарсил ее на вхождение нужных переменных, сохранил, перешел к следующей.
И так 1000 раз.
Вот код функции, который получает на вход URL адрес страницы, и выдает на выходе HTML страницы в виде string. Теперь ее можно парсить обычными строковыми функциями, или пременить RegExp-ы.
private string GetPageByURL(string strURL)
{
try
{
// used to build entire input
StringBuilder sb = new StringBuilder();
// used on each read operation
byte[] buf = new byte[8192];
// prepare the web page we will be asking for
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(strURL);
// execute the request
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
// fill the buffer with data
count = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (count != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.GetEncoding("UTF-8").GetString(buf, 0, count);
// continue building the string
sb.Append(tempString);
}
}
while (count > 0); // any more data to read?
return sb.ToString();
}
catch (Exception ex)
{
return "";
}
}
* This source code was highlighted with Source Code Highlighter.
Теперь в цикле ходим по страницам:
www.livejournal.com/ratings/users/?page=1
…
www.livejournal.com/ratings/users/?page=50
выкачиваем их с помощью вышеуказанной функции, потом бегаем по ним как по стрингам и собираем в ArrayList имена юзеров и их «в друзьях у».
Получаем список из 1000 человек. Потом проходим по нему в цикле, и заходим на страницы http://[имя пользователя].livejournal.com/profile и парсим их на вхождения остальных переменных.
После чего все пишем в базу, файл, или просто выплеваем на страницу, а оттуда копипастим ручками в Excel.
А для того, чтобы LiveJournal на моего робота не обижался – поставил существенную задержку между заходами, а то они очень уж строго предупреждают – будете ходить к нам своими роботами и не вытирать ноги – забаним. Поэтому весь процесс занял больше суток – написание робота, тестирование, работа, форматирование результатов. Согласен, на php можно было управиться кодом в полтора экрана и 2 часа на все про все, но мне .NET все-же привычнее.
Получилась вот такая табличка.