这篇文章主要是介绍生成器和IO多路复用机制, 算是学习asyncio需要的预备知识. 这个系列还有另外两篇文章:

  首先创建一个crawler.py文件, 写入以下代码:

import socket


req = 'GET / HTTP/1.0\r\nHost:cn.bing.com\r\n\r\n'.encode('utf8')
address = ('cn.bing.com', 80)
db = []


def simple_crawler():
    sock = socket.socket()
    sock.connect(address)
    sock.send(req)
    response = b''
    while 1:
        chunk = sock.recv(1024)
        if chunk == b'':
            sock.close()
            break
        else:
            response += chunk
    db.append(response)


if __name__ == '__main__':
    print('开始爬取...')
    simple_crawler()
    print('获取到{}条数据'.format(len(db)))

运行crawler.py文件, 结果如下:

从零开始学asyncio(上)

其中, simple_crawler函数做了如下几件事:

  1. 创建一个socket对象
  2. 连接服务器
  3. 向服务器发送http请求
  4. 接收服务端的响应内容
  5. 处理和储存响应内容

通过这五个步骤, 我们实现了一个最基本的爬虫实例.

从零开始学asyncio(上)
这里的请求之所以使用HTTP1.0协议, 是因为HTTP1.0默认不是长连接, 服务器在发送完数据后会自己断开. 因此当socket接收到空字节的时候, 就说明服务器已经断开了, 也就是说数据已经接收完了.
如果要使用HTTP1.1协议, 那么在请求头中加上Connection:close就行.
补充说明

相关文章:

  • 2021-07-30
  • 2021-11-03
  • 2021-06-11
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2023-03-31
  • 2021-06-23
  • 2021-12-06
  • 2021-12-06
  • 2021-04-29
  • 2021-08-26
  • 2021-05-29
相关资源
相似解决方案