从socket到爬虫

Posted mayeye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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\r\nHost:{2}\r\nConnection:close\r\n\r\n"
    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"))

 

以上是关于从socket到爬虫的主要内容,如果未能解决你的问题,请参考以下文章

SOCKET简单爬虫实现代码和使用方法

scrapy主动退出爬虫的代码片段(python3)

socket-----爬虫&&文件传输

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

导航抽屉活动:在按钮单击时从片段移动到片段

如何从片段到活动而不会干扰片段的可重用性