Python3网络爬虫(1):利用urllib进行简单的网页抓取
1.开发环境
pycharm2017.3.3
python3.5
2.网络爬虫的定义
网络爬虫,也叫网络蜘蛛(web spider),如果把互联网比喻成一个蜘蛛网,spider就是一只在网上爬来爬去的蜘蛛,网络爬虫就是根据网页的地址来寻找网页的,也就是URL。举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com/
URL就是统一资源定位符(uniform resource location),他的一般格式如下(带方括号[]的为可选项)
protocol://hostname[:port]/path/[:parameters][?query]#fragment
URL的格式由三部分组成:
(1)protocol:第一部分就是协议,例如百度使用的就是https协议;
(2)hostname[:port]:第二部分人就是主机名(还有端口号为可选参数),一般网站默认的端口号为80
(3)path:第三部分就是主机资源的具体地址,如目录和文件名等,网络爬虫就是根据这个URL来获取网页信息的
3.简单爬虫实例
在Python3.x中,我们可以使用urllib这个组件抓取网页,urllib是一个URL处理包,这个包中集合了一下处理url的模块,如下:
(1)urllib.request模块是用来打开和读取URLs的;
(2)urllib.error模块包含一些由urllib.request产生的错误,可以使用try进行捕捉处理
(3)urllib.parse模块包含了一些解析URLs的方法;
(4)urllib.robotparser模块用来解析robots.txt文本文件,它提供了一个单独的RobotFileParser类,通过该类提供的can_fatch()方法测试爬虫是否可以下载一个页面
我们使用urllib.request.urlopen()这个接口函数就可以很轻松的打开一个网站,读取并打印信息
下面来写一个简单的程序实现一下
from urllib import request
if __name__ == "__main__":
response = request.urlopen("http://www.baidu.com")
html = response.read()
print(html)
运行结果(可以看到进度条还能拉倒很远)

这都是些什么鬼玩意呢
拿来对比一下,浏览器中打开www.baidu.com,查看页面元素,快捷键F12(浏览器最好用火狐或者Chrome)

东西都一样,就是格式有点乱,可以通过简单的decode()命令将网页的信息进行解码并显示出来,在代码中添加一句html=html.decode("utf-8")即可
from urllib import request if __name__ == "__main__":
response = request.urlopen("http://www.fanyi.baidu.com/")
html = response.read()
html = html.decode("utf-8")
print(html)
输出正常的html格式

当然编码方式不是我们猜出来的,是查出来的,在查看元素中找到head标签,打开,看到charset="utf-8",就是编码方式

4.自动获取网页编码方式的方法
这里采用第三方库的方法,安装chardet
pip install chardet

对代码稍作修改用来判断网页的编码方式
from urllib import request
import chardet
if __name__ == "__main__":
response = request.urlopen("http://www.baidu.com")
html = response.read()
#html = html.decode("utf-8")
charset = chardet.detect(html)
print(charset)

可以看到返回的是字典,最后也可以整合一下
from urllib import request
import chardet
if __name__ == "__main__":
response = request.urlopen("http://www.baidu.com")
html = response.read()
charset = chardet.detect(html)
html = html.decode(charset.get('encoding')) print(html)

完美
Python3网络爬虫(1):利用urllib进行简单的网页抓取的更多相关文章
- Python实现简单的网页抓取
现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...
- 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】
[摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...
- 转:【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图
[摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...
- Python3网络爬虫(三):urllib.error异常
运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article ...
- python3一个简单的网页抓取
都是学PYTHON.怎么学都是学,按照基础学也好,按照例子增加印象也好,反正都是学 import urllib import urllib.request data={} data['word']=' ...
- 转:【Python3网络爬虫开发实战】 requests基本用法
1. 准备工作 在开始之前,请确保已经正确安装好了requests库.如果没有安装,可以参考1.2.1节安装. 2. 实例引入 urllib库中的urlopen()方法实际上是以GET方式请求网页,而 ...
- Python3 网络爬虫(请求库的安装)
Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...
- [Python3网络爬虫开发实战] 2.3-爬虫的基本原理
我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛 ...
- Python3网络爬虫开发实战PDF高清完整版免费下载|百度云盘
百度云盘:Python3网络爬虫开发实战高清完整版免费下载 提取码:d03u 内容简介 本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib.req ...
随机推荐
- [05] Bean的作用域和生命周期
1.Bean的作用域和初始化时间 之前我们稍微提到过,Spring中管理的Bean,默认都是单例模式,这意味着你多次获取某个对象,得到的都是相同的对象.单例作用域的显性写法是scope属性,如下,这和 ...
- Apache与Nginx
Apache与Nginx的优缺点比较 --- 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的 ...
- Luogu4249 WC2007 石头剪刀布 费用流
传送门 考虑竞赛图三元环计数,设第\(i\)个点的入度为\(d_i\),根据容斥,答案为\(C_n^3 - \sum C_{d_i}^2\) 所以我们需要最小化\(\sum C_{d_i}^2\) 考 ...
- SPOJ1557 GSS2 Can you answer these queries II 历史最值线段树
传送门 题意:给出一个长度为$N$的数列,$Q$次询问,每一次询问$[l,r]$之间的最大子段和,相同的数只计算一次.所有数字的绝对值$\leq 10^5$ GSS系列中不板子的大火题,单独拿出来写 ...
- Scala学习(三)练习
Scala数组相关操作&练习 1. 1. 编写一段代码,将a设置为一个包含n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 def main (args: Array[Strin ...
- better-scroll的参数和方法
格式:let obj = new BScroll(object,{[option1,],.,.}); 注意,如果在某一个组件内创建了一个BScroll的实例,在组件生命周期结束前要注意调用destro ...
- 12.18 Daily Scrum
最近大家确实都很忙,所以所有功能的实现要等到下周. Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. ...
- #科委外文文献发现系统——导出word模板1.0
ps:该篇文档由实验室ljg提供. Crowdsourcing 一. 技术简介 Crowdsourcing, a modern business term coined in ...
- Linux内核分析——Linux内核学习总结
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...
- 第二个spring, 第7天
陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 代码初步已经完成.还差最后一步整合.附上最后一张截图