Python3爬虫学习笔记1.1——urllib官方库的使用
来源:互联网 发布:pano2vr mac v4.1.0 编辑:程序博客网 时间:2024/05/04 04:07
欢迎捧场,上篇我们对什么是爬虫有一个大概的了解,那么我们可以用爬虫来做什么呢?爬虫又是怎么做到的呢?我们一起学习吧。
1.扒个网页压压惊
作为一个知乎的小白用户,平时的任务基本上就是刷刷问题点点赞什么的,今天我们爬一下知乎,应该不会出什么幺蛾子吧。
import urllib.requestresp=urllib.request.urlopen('http://www.zhihu.com')print(resp.read())
写完了之后运行一下,你就会看见这“三行情书”爬下来的一个知乎首页,三行爬虫。曾经在我找爬虫资料的是看见了不止一个人说自己学习爬虫就是为了“哄妹子”,结果发现,爬虫比妹子好玩。2333,我还是选择妹子。运行结果如下:
一不小心知乎首页的源码就显示在你的终端了,就是这么神奇。
2.三行爬虫代码分析
对于第一行,引用的官方库urllib.request,不解释。
第二行代码,我们调用的是urllib.request库里面的urlopen方法(Python3对urllib库做了整合,你有可能看见Python2.X中的写法是 urllib2.urlopen)。对urlopen方法传入一个URL,这个URL就是知乎首页的网址,协议是HTTP协议,代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:
urlopen(url, data, timeout)
其中,data 和 timeout 是可选参数。data表示访问URL时要传送的数据,默认为空None;timeout是设置超时时间,默认为 socket._GLOBAL_DEFAULT_TIMEOUT。
url是必须要传送的,在这个例子里面我们传送了知乎首页的URL,执行urlopen方法之后,返回一个resp对象,返回信息便保存在这里面。
第三行:
print(resp.read())
对于返回的resp对象,有一个read()方法,即可获取网页内容并打印出来。尝试一下不用read()方法,直接打印resp对象。
print(resp)
直接打印出了该对象的描述。
所以我们在爬网页的过程中切记要加上read()方法,不然你可能就得不到你想要的东西。
3.编码问题
我们在浏览器中打开知乎首页,查看网页源代码,对比看一下。
结果如下
通过对比,很容易看出来,刚才爬下来的一大串字符,就是知乎的首页代码,但是细心的同学会很容易发现一个问题,就是爬下来的代码中,汉字没有正确表达,原因就是对汉字的编码格式不对。我们现在对爬下来的内容指定编码格式,即:
import urllib.requestresp=urllib.request.urlopen('http://www.zhihu.com')print(resp.read().decode('utf-8'))
将内容用”utf-8“编码表达,然后我们在看一下爬下来的内容。
可以,很明显,重新编码之后的内容才是我们想要的。
4.构造Requset
上面我们提到了,urlopen一般接受三个参数,
urlopen(url, data, timeout)
data表示访问URL时要传送的数据,即请求报文。
我们打开浏览器的开发者工具,查看Request Headers,如下
那我们需要如何构造Requset呢?下面的代码将爬虫伪装为浏览器构造请求报文。
import urllib.requestweb_header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}url_zhihu='https://www.zhihu.com'req=urllib.request.Request(url=url_zhihu,headers=web_header)resp=urllib.request.urlopen(req)print(resp.read().decode('utf-8'))
这样我们就完成了对爬虫的伪装,服务器会把爬虫当作浏览器。为什么要伪装呢?这是因为很多网站都会有防爬虫机制,如果不做一些必要的伪装,很多网站都爬不下来。
本篇我们一起学习了如果爬取网页内容,以及将爬虫伪装成浏览器,下次我们将学习如何模拟登录和cookie的相关知识,一起努力进步吧。
- Python3爬虫学习笔记1.1——urllib官方库的使用
- 【笔记】3、初学python3网络爬虫——urllib库的使用
- Python3学习笔记 urllib模块的使用
- Python3爬虫学习笔记(1.urllib库详解)
- Python3 爬虫学习(一):urllib库的使用及简单的爬取
- 爬虫--学习系列--Urllib库的使用
- python3.4爬虫——urllib等模块的引用
- Python3学习笔记(urllib模块的使用)
- Python爬虫学习--urllib的基本使用笔记
- Python3 urllib库爬虫 基础
- python2.7爬虫学习笔记(一)---Urllib库的使用
- python2.7爬虫学习笔记(一)---Urllib库的使用
- Python爬虫入门笔记:urllib库的使用
- Python爬虫入门笔记:urllib库的使用2
- 爬虫笔记(9/23)-----urllib库的使用
- python多线程爬虫学习--urllib的使用
- Python3中urllib学习笔记
- python3使用urllib模块制作网络爬虫
- error: 'TASK_UNINTERRUPTIBLE' undeclared (first use in this function)和error: 'TASK_NORMAL' undeclare
- fork编程之exec函数详解
- Spring配置文件编写
- Jsp的脚本、声明、表达式
- 性感的shell命令--find
- Python3爬虫学习笔记1.1——urllib官方库的使用
- 架构之美读书笔记[2]---Conway(康威)定律理解
- Fragment相关源码阅读笔记(2)FragmentTransaction
- Android-RecyclerView组件中setLayoutManager方法的使用,使RecyclerView更有趣
- 51Nod-1279-扔盘子
- 雷霄骅---巨星陨落
- Jenkins自动打包配置
- 雷霄骅---巨星陨落
- UVA 1396