zoukankan      html  css  js  c++  java
  • 从socket到爬虫

       0.爬虫是一种我们模拟用户向网络服务器快速送请求以获得数据的工具,我们通常使用的爬虫是基于http协议的,http协议是一个典型的应用层的协议,协议就是一些规定,我们按照协议做事就不会错,通过底层一点的协议模拟高级一点的协议可以更好的理解协议。今天从协议,和代码实现两个方面来讲一下socket爬虫,能够通过socket编写爬虫能够更好的理解爬虫。

      1.协议:

        1.1.http是Hyper Text Transfer Protocol的缩写。主要的特点是简单快速。协议主体主要包括,请求行,请求头部,和请求数据。

        1.2.请求行包括请求方法,请求的路径,以及请求的http版本号,请求方法有常见的post,get。还有常常在app或者client端使用的Put,delete等,路径就是url域名后面的一部分,请求版本号一般是http/1.1,现在http2.0也在使用了,可以尝试一下

        1.3.请求头部包括一些常见的对请求的描述比如connection描述链接的状态,常见的有close也就是传完就断开链接,还有keep-alive,也就是常见的长链接。user-agent描述浏览器的信息。content-type描述数据的形式。还有很多,可以自行查看

        1.4.请求数据。描述发送请求时附带的数据,get请求一般没有数据,post请求会把表单中的数据放在这里

      2.代码展示:

        

    #以此文件演示基于http协议的爬虫
    from socket import *
    
    
    def genHttp1(host,path="/",method="GET"):
        temp = "{0} {1} HTTP/1.1
    Host:{2}
    Connection:close
    
    "
        request=temp.format(method,path,host)
        return request
    
    
    def get(url,host):
        ip_port=(host,80)
        link = socket(AF_INET,SOCK_STREAM)
        link.connect(ip_port)
        requrl = genHttp1(host,path=url)
        print(requrl)
        link.send(requrl.encode("utf-8"))
        data = b''
        while True:
            d  = link.recv(1024)
            if d:
                data+=d
            else:
                break
        link.close()
        return data.decode("utf-8")
    
    
    if __name__ == '__main__':
        print(get("/","www.baidu.com"))
  • 相关阅读:
    vue使用elementui合并table
    使用layui框架导出table表为excel
    vue使用elementui框架,导出table表格为excel格式
    前台传数据给后台的几种方式
    uni.app图片同比例缩放
    我的博客
    【C语言】取16进制的每一位
    SharePoint Solution 是如何部署的呢 ???
    无效的数据被用来用作更新列表项 Invalid data has been used to update the list item. The field you are trying to update may be read only.
    SharePoint 判断用户在文件夹上是否有权限的方法
  • 原文地址:https://www.cnblogs.com/mayeye/p/10803719.html
Copyright © 2011-2022 走看看