Как мне найти IP-адрес страницы поиска Google с помощью Python - PullRequest
0 голосов
/ 24 мая 2018

Новое в программировании на Python и попытка решить проект кодирования.Я пытаюсь написать фрагмент кода, который получит доступ к подстранице на веб-сайте.Я могу получить доступ к главной странице сайта, используя ip для .connect, а затем использую .sendall и .recv для получения основной информации главной страницы.Теперь я не хочу двигаться дальше и захватить страницу поиска.

В этом конкретном примере: если вы введете ключевые слова в адресную строку (в данный момент используете Chrome), вы получите страницу результатов поиска.Я пытаюсь собрать необработанные данные с этой страницы и выгрузить их в файл.Я могу получить доступ к IP-адресу главной страницы Google, используя .gethostbyname, но URL-адрес страницы поиска представляет собой строку слов.Я понятия не имею, как написать код, который позволит получить доступ к этой странице, или отправить слова поиска, чтобы вызвать тот же ответ от Google, что позволяет мне собирать эти данные в качестве ответа на .sendall.

Есть ли способ для меня получить доступ к этой странице, которая была явно создана и отправлена ​​обратно в мой веб-браузер, используя Python?Если я не могу с помощью простого кода .connect и .recv, есть ли другой / лучший способ?

Все рекомендации приветствуются.Никогда не публиковал код, поэтому извините за ошибки этикета:

import socket
import sys

try:
  mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
  print("Failed to create socket.")
  sys.exit()
try:
  host = (socket.gethostbyname("www.google.com"), 80)
except socket.gaierror:
  print("Failed to get host")
  sys.exit()

print (host)

print (type (host))

mysock.connect(host)
message = b"GET / HTTP/1.1\r\n\r\n"
try:
  mysock.sendall(message)
except socket.error:
  print("Failed to send")
  sys.exit()
data = mysock.recv(5000)
mysock.close()

1 Ответ

0 голосов
/ 24 мая 2018

Когда вы изначально создаете сокет подключения, ваша операционная система резервирует «файловое» пространство (в кавычках специально, не вдаваясь в него сейчас), которое вы создаете на своей машине.Затем операционная система назначает порт в вашей системе для созданного вами файлового пространства и возвращает вам дескриптор файла, описывающий его местоположение.Этот порт используется для отправки и получения данных.

Когда вы запускаете метод connect для подключения к какому-либо URL-адресу Google, библиотека socket автоматически решает, что для установления соединения следует использовать определенный протокол,и делает некоторую начальную связь с сервером, чтобы создать поток.В этом потоке вы отправите один запрос, разделитесь на пакеты одинакового размера и получите ответ от сервера таким же образом.

Чтобы создать запрос, который в основном представляет собой просто строку, отправляемую первоначально на серверы Google, которая сообщает им, что вы хотите и, что более важно, как вы хотите, нам нужно сделать что-то дополнительное, называемое запросом SSL.Если вы заметите, правильный URL-адрес для Google - https://google.com, а не http://google.com (хотя последний перенаправляет), потому что вы хотите договориться об определенном частном ключе, чтобы зашифровать ваше сообщение и скрыть его от других, которые могут его видеть.После того как вы совершили магию connect, вы отправляете этот запрос SSL с помощью метода send, обычно запрос автоматически создается библиотекой Python.Затем вы получите ваш ответ, который представляет собой заголовки ответа (значения отображаются друг на друга, давая вам некоторую начальную информацию о том, что вы получаете), а затем ваше тело, которое является HTML-кодом.

Давайте углубимся в запрос немного подробнее.Когда вы отправляете поиск в Google, он сохраняется в запрошенном вами URL-адресе.как сказал @ user2357112, поиск new apple iphone становится https://www.google.com/search?q=new+apple+iphone&....Все до знака равенства - это GET parameter, а после него - его значение.Для ваших целей вам важна только часть q=, которая представляет собой ключевые слова, введенные вами в строку поиска.Все остальное должно оставаться прежним, разделенным амперсандами (&).

После того, как вы отправили запрос на этот URL и получили свой HTML-ответ, вы должны проанализировать его, чтобы получить результаты поиска.Пожалуйста, сделайте отдельный вопрос для этого, если вам нужно, поскольку каждый пост должен иметь только один вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...