Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Кандёхаем веселее!
295 / 324 / 76
Регистрация: 02.10.2012
Сообщений: 2,164
1

Как получить страничку результатов запроса в гугл

26.04.2013, 07:15. Просмотров 1999. Ответов 2
Метки нет (Все метки)

Собственно, вопрос в названии. Удалось сделать это в Яндексе (strYand1), но когда пробовал использовать строку strGoog1 выбрасывается IOException с сообщением "403 forbidden". Использование strGoog2 выдает просто главную страницу Гугла(так, если бы после ".com" ничего не было). Может, он как-то просекает, что я не с браузера. Хотя, им не пофиг, это же не читерство. Прошу помощи.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.lang.StringBuffer;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
 
//...
 
public static String makeRequest(String r) throws MalformedURLException, IOException {
    
    final String strGoog1 = "http://www.google.com/search?q="; //403
    final String strGoog2 = "http://www.google.com/#output=search&sclient=psy-ab&q="; //google root
    final String strYand1 = "http://yandex.ua/yandsearch?text="; //success
    
    URL u =new URL(strGoog2+r);
    URLConnection uc = u.openConnection();
    BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream(),"UTF-8"));
    InputStreamReader is;
    StringBuffer sb = new StringBuffer();
    char[] buf = new char[1024];
    int x;
    while (true) {
    x = br.read(buf);
    if (x==-1) {
        br.close();
        break;
        }
    if (x==1024) sb.append(buf);
    if (x<1024) sb.append(buf, 0, x);
    }
    return sb.toString();  
    }
Добавлено через 6 минут
Забыл написать, что если скопировать одну из строк в браузер, например "http://www.google.com/search?q=foo", то выдает нормально 10 ссылок на результаты. А из проги нельзя.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 07:15
Ответы с готовыми решениями:

Получить ассоциативный массив из результатов запроса к БД MSSQL
Доброго всем дня! Возникла проблема с созданием ассоциативного массива, данные для которого...

Вычитание результатов одного запроса из результатов другого
Есть 2 запроса,подскажите возможно ли вычесть одно из второго

Как получить страничку с уже выполненным JS
Приветствую. :) Делаю блогоридер на wpf)) Есть задача получить топ блогов яндекса. это...

Как сделать перебор результатов вложенного запроса
Есть таблица в которую пишутся данные в таком формате ник|ip|time jok|37.213.209.176|1366690704...

2
1997 / 1420 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
26.04.2013, 13:34 2
"Просекает" он это по заголовку User-Agent в запросе. Если поставить, например, Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.52 - всё отдает. Правда, боюсь, Вам это слабо поможет - он отдает огромное полотно смеси стилей, JavaScript-а и html. Причем стилей и скрипта - три четверти страницы.
2
Кандёхаем веселее!
295 / 324 / 76
Регистрация: 02.10.2012
Сообщений: 2,164
26.04.2013, 14:37  [ТС] 3
Получил, спасибо!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static String makeRequest2(String r) throws MalformedURLException, IOException {
    
    final String strGoog1 = "http://www.google.com/search?q="; 
    
    URL u =new URL(strGoog1+r);
    HttpURLConnection uc = (HttpURLConnection) u.openConnection();
    uc.setRequestMethod("GET");
    uc.setRequestProperty("User-Agent", "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.52");
    BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream(),"UTF-8"));
 
    StringBuffer sb = new StringBuffer();
    char[] buf = new char[1024];
    int x;
    while (true) {
    x = br.read(buf);
    if (x==-1) {
        br.close();
        break;
        }
    if (x==1024) sb.append(buf);
    if (x<1024) sb.append(buf, 0, x);
    }
    return sb.toString();  
    }
Страница там действительно адская, но ссылки удалось извлечь парсером, хотя их очень много. (Думал, будет не более 20).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 14:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как исключить из результатов запроса записи с определенным значением в одном столбце?
день добрый! подскажите как можно реализовать: нужно выбрать все записи из базы рецептов но...

Реклама поверх результатов поиска в Гугл
Здравствуйте. Порой при поиске в Google поверх результатов возникает реклама, из-за чего ссылки...

Как получить больше чем 1000 результатов от VKNet?
Кто знает как обойти ограничение vk.users.search? Оно возвращает только 1000 первых результатов, а...

Объединение результатов запроса
Добрый день. Есть несколько таблиц - пусть: A, B, C. В этих таблицах есть только одно совпадающее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.