Python爬虫系列之一——我有100万?

高中生都开始写爬虫了,可见爬虫有多热门,一个某某985高校的研究生不学习学习爬虫实在是有些落伍啦~

一、网络爬虫和url

秉承着有事不知问度娘的习惯,小詹先查了下网络爬虫的具体定义,百科上如是说:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

网络爬虫是根据根据网页的地址来寻找网页的,也就是URL(统一资源定位符,Uniform Resource Locator)其一般格式如下:

一般格式:protocol :// hostname[:port] / path / [;parameters][?query]#fragment
(1)protocol:第一部分就是协议,例如百度使用的就是https协议;
(2)hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度的主机名就是www.baidu.com,这个就是服务器的地址;
(3)path:第三部分就是主机资源的具体地址,如目录和文件名等。

二、审查元素

咱第一个实例是爬网上的浏览器某网站信息,获取的是一系列代码,与我们使用浏览器时界面不一样,是因为我们在使用浏览器的时候,浏览器已经将这些信息转化成了界面信息供我们浏览。当然这些代码我们也可以从浏览器中查看到。下面就以支付宝装逼为例介绍下网页上审查元素的神奇之处:

1.首先我们要进入支付宝官网,登陆,进入个人页面~

2.登陆后进入我的账号,这是网上的图,看得清才6块钱哈哈,比我穷,我有7块~

3.鼠标放在账号余额6那,右键再点击审查元素,可看到对应的代码位置处

4.既然找到了“穷的原因”,那就改掉它~双击代码6处,修改成任意金额,哇,屌丝瞬间逆袭土豪~

呸呸呸,想钱想疯了,跑偏了啊~回到正题,咱们开始写第一个爬虫实例啦~

三、第一个爬虫实例

小詹用的时python3.6.4,python3之后版本中我们可以使用urlib这个组件抓取网页,urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:

1.urllib.request模块是用来打开和读取URLs的;
2.urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;
3.urllib.parse模块包含了一些解析URLs的方法;
4.urllib.robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。

1.TEST1:

利用urllib.request.urlopen()这个接口函数打开一个网站,读取并打印信息

urlopen()可以直接利用url做参数,实现对某个网站的信息读取~

# -*- coding: UTF-8 -*-
from urllib import request
if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    print(html)
main()

这时得到的结果是一堆乱码,我们浏览器的界面是处理后再展示给我们的,就像上边审查元素介绍的一样。

想要看到较为整齐有格式的返回结果,可以加上指定的编码方式,比如代码中网站是utf-8编码,加上一行代码之后如下:

# -*- coding: UTF-8 -*-
from urllib import request
if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com")
    html = response.read()
    html = html.decode('utf-8') #编码方式
    print(html)
main()

返回结果如下:明显有一定的编码逻辑:

2.Test2:

如何自动获取网络编码?比较不是所有的网站编码都是utf-8,如何自动获取呢?推荐利用chardet模块,这是用于判断编码方式的第三方库,安装方式很简单的一句pip指令:

pip install chardet

安装好后,我们可以使用chardet.detect()方法,判断网页的编码方式:

# -*- coding: UTF-8 -*-
from urllib import request
import chardet
if __name__ == "__main__":
    response = request.urlopen("http://fanyi.baidu.com/")
    html = response.read()
    charset = chardet.detect(html)
    print(charset)
main()

通过加入了chardet.detect()方法,可以将网页编码方式以字典形式反馈给我们:

原文发布于微信公众号 - 小小詹同学(xiaoxiaozhantongxue)

原文发表时间:2018-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

老司机教你下载tumblr上视频和图片的正确姿势

本文面向初学者。 很多同学问我:“我非常想学Python编程,但是找不到兴趣点”。 还有的同学呢,找到了很好的兴趣点,但是无从下手,“玄魂老师,我想下载tumb...

1.3K7
来自专栏Android开发与分享

Android开发架构规范前言命名规范编程规范代码提交规范架构规范参考文章

3988
来自专栏XAI

【Python3-API】情感倾向分析示例代码

Python3-urllib3-API情感倾向分析示例代码 AccessToken获取可以参考:http://ai.baidu.com/forum/topic/...

3539
来自专栏王大锤

理解消息转发机制

1065
来自专栏pangguoming

流媒体Red5服务自定义媒体文件路径

使用bean对自己的项目进行配置,更换默认的视频播放目录和视频录制目录.在0.6版的时候,

2904
来自专栏坚毅的PHP

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还...

4943
来自专栏码农分享

推荐一个有用的Excel操作类库 LinqToExcel

以前项目中对Excel进行信息读取,我都是使用的NPOI的封装类,给定一个fileurl,然后返回给我一个datatable。接下去自己去解析数据。如果使用这种...

1852
来自专栏开发与安全

套接字socket 的地址族和类型、工作原理、创建过程

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为...

28111
来自专栏武军超python专栏

2018年8月16日多线程并发和队列

静态文件的打包:静态文件包括图片,视频等静态的文件 MANIFEST.in include  如果要打包静态文件,定义MANIFEST.in配置文件

1526
来自专栏我的安全视界观

【一起玩蛇】Nodejs代码审计中的器

5636

扫码关注云+社区

领取腾讯云代金券