前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫系列之一——我有100万?

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

作者头像
小小詹同学
发布2018-04-13 16:58:41
6680
发布2018-04-13 16:58:41
举报
文章被收录于专栏:小詹同学小詹同学

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

一、网络爬虫和url

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

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

代码语言:javascript
复制
一般格式: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的模块,如下:

代码语言:javascript
复制
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做参数,实现对某个网站的信息读取~

代码语言:javascript
复制
# -*- 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编码,加上一行代码之后如下:

代码语言:javascript
复制
# -*- 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指令:

代码语言:javascript
复制
pip install chardet

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

代码语言:javascript
复制
# -*- 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()方法,可以将网页编码方式以字典形式反馈给我们:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小詹同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档