Python网络编程_抓取百度首页代码(注释详细)
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网络编程_抓取百度首页代码(注释详细)的更多相关文章
- Python -- 网络编程 -- 简单抓取网页
抓取网页: urllib.request.urlopen(url).read().decode('utf-8') --- (百度是utf-8,谷歌不是utf-8,也不是cp936,ascii也不行 ...
- Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页
1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新 ...
- 7.Python网络编程_多线程共享全局变量问题
Python多线程支持全局变量的共享操作,但是它存在很多问题,先来看以下程序,该程序理论上执行完毕后全局变量g_num的值应该是2000000,但是在实际运行中,结果不足理论值 import thre ...
- 6.Python网络编程_全局变量基础
变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量.全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...
- 【python爬虫】 之 爬取百度首页
刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 u ...
- 8.Python网络编程_多线程死锁
死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ...
- 5.Python网络编程_通过继承实现多线程
import threading import time #继承形式的多线程,适合于程序比较复杂的情况 class MyThread(threading.Thread): #t.start()会调用r ...
- 4.Python网络编程_一般多线程创建步骤
#该程序使用命令行执行,IDE执行会有其他线程附加 import threading import time #初始化一个线程 #t=threading.Thread(target=func) #fu ...
- 3.Python网络编程_多任务问题抛出
#单线程程序 import time def sing(): """唱歌5秒钟""" for i in range(5): print(&q ...
随机推荐
- .NET Core+MongoDB集群搭建与实战
目录 安装 MongoDB apt 直接安装(方法1) apt 仓库安装(方法2) 方法1.2启动 MongoDB 通过二进制包安装(方法3) 安装依赖 deb 安装 MongoDB tgz 安装 M ...
- go http爬虫
1 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { r ...
- 查看centos 7.6 当前所有监听端口
由于要开展服务器安全工作查看系统当前所监听端口 ss -lnt 缺点发现有重复端口也显示出来了! ss -lnt | awk '/*
- 跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)
前言 对于Redis而言,很多小伙伴只关注其关键的五大基础类型:string.hash.list.set.sorted set(有序集合),其实还有三种特殊类型在很多应用场景也比较适合使用,分别是:b ...
- 小C和小派的缠绵爱情——C语言调用Python代码
我妒忌你的开源,你眼红我的速度,不如我们就在一起吧! --------SJ2050 2019.4.9号更新:实现在未安装python环境的机子上运行调用了python程序的C语言代码! 文章目录 环境 ...
- Vue留言 checked框案列
在命令行窗口输入vue create "工程名"命令 来创建vue脚手架
- mysql 必会基础1
1.cmd --> 开启服务:net start mysql 关闭服务:net stop mysql 没有restart命令;命令格式:net stop serviceName;后面不需要加分号 ...
- 010_Markdown学习
目录 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 引用 分割线 图片 超链接 列表 表格 代码 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 ...
- Qlik Sense插件及QRS接口补充
date: 2019-10-18 09:10:00 updated: 2019-10-18 15:18:00 Qlik Sense插件及QRS接口补充 1.插件 1.1 获取数据方式 理论上 Engi ...
- spring基础学习
ClassXmlAplicationContext和FileSystemXmlApplicationContext的区别 https://www.cnblogs.com/sxdcgaq808 ...