首页 > 解决方案 > 如何在python中将html文件转换为代码?

问题描述

如何使用套接字将 html 文件转换为 python 代码。我能够使用请求库来实现。但是,它需要重写为套接字。我不明白怎么做。通过请求的实现代码将在下面。我还将留下可悲的尝试,通过使用 Google 的套接字来实现。然而,这个决定一点也不正确。!(帮助实现使用套接字。

import requests

reg_get = requests.get("https://stackoverflow.blog/")
text = reg_get.text
print(text)
import socket
request = b"GET / HTTP/1.1\nHost: https://stackoverflow.blog/\n\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("https://stackoverflow.blog/", 80))
s.send(request)
result = s.recv(10000)
while (len(result) > 0):
    print(result)
    result = s.recv(10000)

在看到评论并听取您的意见后。我已经重写了以下代码。但是,我从来没有得到过html。我收到了有关该网站的信息。如何在python中获取html结构

import socket
import ssl

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
request = "GET /r/AccidentalRenaissance/comments/8ciibe/mr_fluffies_betrayal/ HTTP/1.1\r\nHost: www.reddit.com\r\n\r\n"

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
s = context.wrap_socket(sock, server_hostname = "www.reddit.com")

s.connect(("www.reddit.com", 443))
s.sendall(request.encode())

contest = s.recv(1024).decode()

s.close()
print(contest)

结果

HTTP/1.1 200 OK
Connection: keep-alive
Cache-control: private, s-maxage=0, max-age=0, must-revalidate, no-store
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
Date: Sun, 03 Oct 2021 03:34:25 GMT
Via: 1.1 varnish
Vary: Accept-Encoding, Accept-Encoding

标签: pythonsockets

解决方案


URL 由协议、主机名、可选端口和可选路径组成。在 URLhttp://stackoverflow.blog/中,https 是协议,stackoverflow.blog 是主机名,没有提供端口或路径。对于 http,端口默认为 80,路径默认为 /。使用套接字时,首先使用connect在端口建立与主机的连接,然后发送HTTP 命令以检索路径上的页面。检索页面的 HTTP 命令是“GET /”并接收来自服务器的响应。

请注意,我使用 http 而不是 https,因为 https 会在连接完成后但在“GET /”完成之前向上述内容添加安全设置和协商。使用 Requests 而不是尝试自己实现它是相当复杂的,也是一个很好的理由。如果你不想使用 Requests 但又不想下到 socket 的级别,看看 urllib3


推荐阅读