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. LOJ2540 PKUWC2018 随机算法 状压DP

    传送门 两种$DP$: ①$f_{i,j}$表示前$i$次选择,最大独立集为$j$时达到最大独立集的方案总数,转移:$a.f_{i,j}+=f_{i+1,j+2^k}$(保证$k$加入后符合条件):$ ...

  2. 重装系统之制作U盘启动盘

    准备: 1.需要一个大于4G的U盘. 2.一个原版系统. 3.制作U盘启动盘的工具—ultraliso. 一.一个大于4G的U盘 制作启动盘将会格式化U盘,记得做好备份. 二.一个原版系统 至于你要装 ...

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

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

  4. [Spark][python]以DataFrame方式打开Json文件的例子

    [Spark][python]以DataFrame方式打开Json文件的例子: [training@localhost ~]$ cat people.json{"name":&qu ...

  5. Excel 中批量处理数据(改成 json 格式)

    如下excel: 需要处理成下面的效果: 方法: 在 C2 中输入公式: ="{"""&"code"&"" ...

  6. item 8: 比起0和NULL更偏爱nullptr

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 先让我们看一些概念:字面上的0是一个int,不是一个指针.如果C+ ...

  7. ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及几种abp封装的Javascript函数库

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期         简介 经过前几节,我们已经解决数据库,模型,DTO,控制器和注入等问题.那么再来看一下登录逻辑.这 ...

  8. 利用Tarjan算法解决(LCA)二叉搜索树的最近公共祖先问题——数据结构

    相关知识:(来自百度百科)  LCA(Least Common Ancestors) 即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 例如: 1和7的最近公共祖先为5: 1和5的 ...

  9. 附加题(一)——interesting的抄袭现象

    这次的作业很有意思,是让我们搜索抄袭的同学的个人总结,并让我们列出链接,时间,作者及原因.其实我不是很能理解,抄袭现象是可耻的不受推崇的这是无可厚非,但是为什么要求我们大部分没有抄袭的同学去探究抄袭同 ...

  10. Leetcode——258.各位相加【水题】

    给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所 ...