1 #coding=utf-8
2 #网络编程
3
4 #客户端建立socket套接字
5 #引入socket模块
6 import socket
7 #实例化一个套接字,2个参数分别是: IPV4、TCP 协议
8 s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
9 #建立连接,2个参数是: 网址、端口
10 s.connect(('www.baidu.com',80))
11 #向服务器发送请求,传递的参数是:1.请求方式 2.地址 3.链接方式(open or close)
12 #注:‘GET / HTTP’这里的‘/’是跟目录的意思
13 s.send(b'GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection: close\r\n\r\n')
14
15 #开始接受服务器传来的数据
16 buffer =[] #新建一个空列表,buffer即缓存的意思
17 while True: #【降一级,防止出现不可控错误?】
18 d = s.recv(1024) #每次最多接收1k字节
19 if d: #如果能正常接收到d(即d不为空)
20 buffer.append(d)
21 else:
22 break
23 data = b''.join(buffer) #组合传来的(列表格式的)数据为字符串(b)格式
24
25 #关闭文件
26 s.close()
27
28 #开始处理数据
29 #分离网页头部与html,注:头部信息是网络传输时的标识信息,通常不需要展示出这部分
30 header,html = data.split(b'\r\n\r\n',1)
31 #以utf-8解码为正常文本
32 print(header.decode('utf-8'))
33 #新建文件,将接收到的数据接入文件内
34 with open('baidu.html','wb')as f:
35 f.write(html)

Python网络编程_抓取百度首页代码(注释详细)的更多相关文章

  1. Python -- 网络编程 -- 简单抓取网页

    抓取网页: urllib.request.urlopen(url).read().decode('utf-8')  ---  (百度是utf-8,谷歌不是utf-8,也不是cp936,ascii也不行 ...

  2. Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页

    1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新 ...

  3. 7.Python网络编程_多线程共享全局变量问题

    Python多线程支持全局变量的共享操作,但是它存在很多问题,先来看以下程序,该程序理论上执行完毕后全局变量g_num的值应该是2000000,但是在实际运行中,结果不足理论值 import thre ...

  4. 6.Python网络编程_全局变量基础

    变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...

  5. 【python爬虫】 之 爬取百度首页

    刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 u ...

  6. 8.Python网络编程_多线程死锁

    死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ...

  7. 5.Python网络编程_通过继承实现多线程

    import threading import time #继承形式的多线程,适合于程序比较复杂的情况 class MyThread(threading.Thread): #t.start()会调用r ...

  8. 4.Python网络编程_一般多线程创建步骤

    #该程序使用命令行执行,IDE执行会有其他线程附加 import threading import time #初始化一个线程 #t=threading.Thread(target=func) #fu ...

  9. 3.Python网络编程_多任务问题抛出

    #单线程程序 import time def sing(): """唱歌5秒钟""" for i in range(5): print(&q ...

随机推荐

  1. Thumbnailator处理图片

    读取源图 of(String... files) of(File... files) of(InputStream... inputStreams) of(URL... urls) 输出文件 toFi ...

  2. kafka-消费者测试

    1. 在窗口1创建一个producer,topic为test,broker-list为zookeeper集群ip+端口   /usr/local/kafka/bin/kafka-console-pro ...

  3. Flink on Yarn三部曲之二:部署和设置

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. Flutter Webview添加Cookie的正确姿势

    场景 h5页面要从cookie里面取数据,所以需要在flutter webview的cookie里面塞一些数据,设置的数据多达十几条:按照网上查的使用方式来设置,通过fiddler抓包发现,只能生效一 ...

  5. CentOS7通过源码安装nginx

    需要先安装安装环境和库: yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum i ...

  6. 对象部分初始化:原理以及验证代码(双重检查锁与volatile相关)

    对象部分初始化:原理以及验证代码(双重检查锁与volatile相关) 对象部分初始化被称为 Partially initialized objects / Partially constructed ...

  7. 在git下如何创建分支

    创建main分支下的远程分支dev: 直接输入dev,就可以创建在main分支下的远程分支dev了 在dev下创建devdev

  8. LeetCode 45跳跃游戏&46全排列

    原创公众号:bigsai,回复进群加入力扣打卡群. 昨日打卡:LeetCode 42字符串相乘&43通配符匹配 跳跃游戏 题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中 ...

  9. Luogu P2447 [SDOI2010]外星千足虫

    题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...

  10. Spring中的BeanFactory与FactoryBean看这一篇就够了

    前言 理解FactoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象,不仅如此,而且对理解Mybatis核心源码也非常有帮助!如 ...