如何使用 Python 查找 Google 搜索页面的 IP 地址
How do I find the ip address of a Google search page using Python
Python 编程新手,正在尝试解决编码项目。
我正在尝试编写一段代码来访问网站中的子页面。我可以使用 .connect 的 ip 访问网站的主页,然后使用 .sendall 和 .recv 获取主页的基本信息。
现在我不想继续前进并捕获搜索页面。
在这个具体的例子中:如果你在地址栏中输入关键字(此时使用Chrome),你会得到一页搜索结果。我正在尝试捕获该页面的原始数据并将其转储到一个文件中。我可以使用 .gethostbyname 访问 Google 的主页 ip 地址,但是搜索页面的 url 是一串单词。我不知道如何编写允许访问该页面的代码,或发送搜索词以触发来自 Google 的相同响应,从而允许我捕获该数据作为对 .sendall.[= 的回答14=]
我是否可以使用 Python 访问此页面,该页面显然是创建并发送回我的网络浏览器的?如果我不能通过使用简单的 .connect 和 .recv 代码,是否有 another/bette 方式?
感谢所有建议。从未发布过代码,所以请原谅任何礼仪错误:
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()
打印(主机)
打印(类型(主机))
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()
当您最初创建一个连接套接字时,您的操作系统会保留一个您在您的计算机上创建的 "file" space(故意用引号引起来,现在不打算讨论)。操作系统然后在您的系统上为您创建的文件 space 指定一个端口,并返回一个文件描述符,描述其位置。此端口是您发送和接收数据的地方。
当您 运行 connect
方法连接到某些 Google URL 时,socket
库自动决定您应该使用特定的协议建立连接,并与服务器进行一些初始通信以创建流。在此流程中,您将发送一个请求,拆分成相同大小的数据包,并以相同的方式从服务器接收响应。
要创建请求,它基本上只是最初发送到 Google 的服务器的字符串,告诉他们您想要什么,更重要的是,您想要它的方式,我们需要做一些额外的事情称为 SSL 请求。如果你注意到,正确的 URL 到 Google 是 https://google.com
而不是 http://google.com
(尽管后者重定向),因为你想协商一个特定的私钥来加密您的通信并将其隐藏起来,不让可能看到的其他人看到。完成 connect
魔法后,您可以使用 send
方法发送此 SSL 请求,通常该请求由 Python 库自动创建。然后您会收到您的回复,即回复 headers(相互映射的值为您提供有关您所获得内容的一些初始信息),然后是您的 body,即 HTML 代码.
让我们更深入地研究一下请求。当您向 Google 提交搜索时,搜索将保存在您请求的 URL 中。正如@user2357112 所说,搜索 new apple iphone
变成 https://www.google.com/search?q=new+apple+iphone&...
。等号之前的所有内容都是 GET parameter
,等号之后的所有内容都是它的值。出于您的目的,您只关心 q=
部分,它代表您在搜索栏中输入的搜索关键字。其他所有内容都应保持不变,并以与号 (&) 分隔。
向 URL 发送请求并收到 HTML 响应后,您必须对其进行解析以获取搜索结果。如果必须的话,请为此提出一个单独的问题,因为每个 post 应该只有一个问题要回答。
Python 编程新手,正在尝试解决编码项目。 我正在尝试编写一段代码来访问网站中的子页面。我可以使用 .connect 的 ip 访问网站的主页,然后使用 .sendall 和 .recv 获取主页的基本信息。 现在我不想继续前进并捕获搜索页面。
在这个具体的例子中:如果你在地址栏中输入关键字(此时使用Chrome),你会得到一页搜索结果。我正在尝试捕获该页面的原始数据并将其转储到一个文件中。我可以使用 .gethostbyname 访问 Google 的主页 ip 地址,但是搜索页面的 url 是一串单词。我不知道如何编写允许访问该页面的代码,或发送搜索词以触发来自 Google 的相同响应,从而允许我捕获该数据作为对 .sendall.[= 的回答14=]
我是否可以使用 Python 访问此页面,该页面显然是创建并发送回我的网络浏览器的?如果我不能通过使用简单的 .connect 和 .recv 代码,是否有 another/bette 方式?
感谢所有建议。从未发布过代码,所以请原谅任何礼仪错误:
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()
打印(主机)
打印(类型(主机))
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()
当您最初创建一个连接套接字时,您的操作系统会保留一个您在您的计算机上创建的 "file" space(故意用引号引起来,现在不打算讨论)。操作系统然后在您的系统上为您创建的文件 space 指定一个端口,并返回一个文件描述符,描述其位置。此端口是您发送和接收数据的地方。
当您 运行 connect
方法连接到某些 Google URL 时,socket
库自动决定您应该使用特定的协议建立连接,并与服务器进行一些初始通信以创建流。在此流程中,您将发送一个请求,拆分成相同大小的数据包,并以相同的方式从服务器接收响应。
要创建请求,它基本上只是最初发送到 Google 的服务器的字符串,告诉他们您想要什么,更重要的是,您想要它的方式,我们需要做一些额外的事情称为 SSL 请求。如果你注意到,正确的 URL 到 Google 是 https://google.com
而不是 http://google.com
(尽管后者重定向),因为你想协商一个特定的私钥来加密您的通信并将其隐藏起来,不让可能看到的其他人看到。完成 connect
魔法后,您可以使用 send
方法发送此 SSL 请求,通常该请求由 Python 库自动创建。然后您会收到您的回复,即回复 headers(相互映射的值为您提供有关您所获得内容的一些初始信息),然后是您的 body,即 HTML 代码.
让我们更深入地研究一下请求。当您向 Google 提交搜索时,搜索将保存在您请求的 URL 中。正如@user2357112 所说,搜索 new apple iphone
变成 https://www.google.com/search?q=new+apple+iphone&...
。等号之前的所有内容都是 GET parameter
,等号之后的所有内容都是它的值。出于您的目的,您只关心 q=
部分,它代表您在搜索栏中输入的搜索关键字。其他所有内容都应保持不变,并以与号 (&) 分隔。
向 URL 发送请求并收到 HTML 响应后,您必须对其进行解析以获取搜索结果。如果必须的话,请为此提出一个单独的问题,因为每个 post 应该只有一个问题要回答。