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"))
  • 相关阅读:
    P1106 删数问题 / U83355 删数问题【升级版】
    P1955 [NOI2015] 程序自动分析
    P4447 [AHOI2018初中组]分组
    P1308 [NOIP2011 普及组] 统计单词数
    Django | 页面数据的缓存与使用
    Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv
    python虚拟环境 | virtualenv 的简单使用 (图文)
    机器学习 | 浅谈K-近邻算法
    特征缩放 | 归一化和标准化 (下)
    简析方差、标准差与数值离散程度
  • 原文地址:https://www.cnblogs.com/mayeye/p/10803719.html
Copyright © 2011-2022 走看看