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进行简单的网页抓取的更多相关文章

  1. Python实现简单的网页抓取

    现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...

  2. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  3. 转:【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  4. Python3网络爬虫(三):urllib.error异常

    运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article ...

  5. python3一个简单的网页抓取

    都是学PYTHON.怎么学都是学,按照基础学也好,按照例子增加印象也好,反正都是学 import urllib import urllib.request data={} data['word']=' ...

  6. 转:【Python3网络爬虫开发实战】 requests基本用法

    1. 准备工作 在开始之前,请确保已经正确安装好了requests库.如果没有安装,可以参考1.2.1节安装. 2. 实例引入 urllib库中的urlopen()方法实际上是以GET方式请求网页,而 ...

  7. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  8. [Python3网络爬虫开发实战] 2.3-爬虫的基本原理

    我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛 ...

  9. Python3网络爬虫开发实战PDF高清完整版免费下载|百度云盘

    百度云盘:Python3网络爬虫开发实战高清完整版免费下载 提取码:d03u 内容简介 本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib.req ...

随机推荐

  1. 一个简单的javascript节流器实现

    节流器 javascript的节流器主要用于延缓某些动作的执行,比如ajax请求,如果input框注册了input事件,那么当用户输入时就会持续的触发这个事件,如果回调函数中持续的通过ajax调用后台 ...

  2. CF1070L Odd Federalization 高斯消元

    传送门 \(r = 1\)直接判断所有点度数是否为偶数 考虑\(r = 2\)的情况.设\(x_i=0/1\)表示\(i\)点所在的集合,那么若\(2 \mid du_u\),则\(\bigoplus ...

  3. JavaScript 格式化数字 - 转

    function number_format(number, decimals, dec_point, thousands_sep,roundtag) { /* * 参数说明: * number:要格 ...

  4. excel的宏与VBA入门——代码调试

    直接介绍重点: 常用的操作是导航栏的逐句与断点: 添加断点:调试->切换断点 单步运行:调试->逐句 查看变量的窗口:视图->本地窗口

  5. [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中?

    [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中? 以如下方法来查看 POPULATE_STATUS 是不行的. SQL> select ins ...

  6. .Net并行编程(一)-TPL之数据并行

    前言 许多个人计算机和工作站都有多个CPU核心,可以同时执行多个线程.利用硬件的特性,使用并行化代码以在多个处理器之间分配工作. 应用场景 文件批量上传 并行上传单个文件.也可以把一个文件拆成几段分开 ...

  7. JSP页面<%@ ...%>是什么意思?

    这表示是指令,主要用来提供整个JSP 网页相关的信息,并且用来设定JSP网页的相关属性,例如:网页的编码方式.语法.信息等.起始符号为: <%@终止符号为: %>目前有三种指令:page. ...

  8. VS2013安装和单元测试

    1. VC2013安装过程及使用感受 刚上大一的时候老师推荐我们用VC++6.0.当时也就听了老师的话用VC++6.0编程了一段时间.后来上了大二买了电脑VC++6.0支持不了WIN8.1所以我就开始 ...

  9. SqlDataAdapter简单介绍 (转)

    From:  http://blog.sobnb.com/u/92/5532.html 一.特点介绍 1.表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连 ...

  10. 可移动的 HelloWorld

    package com.home.test; import java.awt.Color;import java.awt.Cursor;import java.awt.Font;import java ...