运行平台: Windows
Python版本: Python3.x
IDE: Pycharm 2017.2.4
-
看了崔老师的python3网络爬虫实战,受益匪浅,为了帮助自己更好的理解这些知识点,于是打算趁着这股热乎劲,针对爬虫实战进行一系列的教程。
阅读文章前,我会默认你已经具备一下几个要素
1.python3安装完毕
Windows:
https://www.jianshu.com/p/7a0b52075f70
Mac:
http://pythonguidecn.readthedocs.io/zh/latest/starting/install3/osx.html
linux:
https://blog.csdn.net/qq_35195390/article/details/79057597
2.具备基本python语法
廖雪峰:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
菜鸟系列:
http://www.runoob.com/python3/python3-tutorial.html
3.一个能够使用的编辑器
pycharm、sublim
首先,我们来看下面这一段代码
import urllib.request #引入urllib库
response = urllib.request.urlopen("https://tieba.baidu.com/index.html") #发出请求并且接收返回文本对象
html = response.read() #调用read()进行读取
print(html) #打印
打印出来的结果如下
这就是我们获取到的文本对象,也就是我们从浏览器上看到的数据,只不过浏览器能够把他转化成我们看到的形式,我们移步到浏览器,按下F12,看到如下画面
这些便是构成网页的代码,也就是我们爬虫所需要获取到的文本
可是我们的截图似乎和他不太一样,我想你是说这样的效果,那么我们看看下面这段代码
import urllib.request #引入urllib库
response = urllib.request.urlopen("https://tieba.baidu.com/index.html") #发出请求并且接收返回文本对象
html = response.read().decode('utf-8') #调用read()进行读取,转换为utf-8的编码
print(html) #打印
我们来看看效果
进行转码处理一下就可以得到我们从网页上看到的代码了,所以爬虫不难,难在对方的开发人员不想让你拿到这些代码,于是双方就进行了斗智斗勇的阶段,这些以后会提到,回到正题,那么不是每个网页都是utf-8的形式编码的,那么我们该如何获取到该编码,别急,python为什么强大,就是因为很多前辈都帮我们造好轮子,我们只需要拿过来用就行
pip install chardet
执行下面的代码
import urllib.request #引入urllib库
import chardet
response = urllib.request.urlopen("https://tieba.baidu.com/index.html") #发出请求并且接收返回文本对象
html = response.read() # 调用read()进行读取
chardit1 = chardet.detect(html) #获取文本编码
print(chardit1)
print(html.decode(chardit1['encoding']))
返回结果
我们下来看看ullib这个库
urllib request 模块提供了最基本的构造 HTTP 请求的方法, 利用它可以模拟浏览器的请求发起过程
urllib.request.urlopen
(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)¶
- url 我们所要请求的网址(有些网站可能会有登陆操作,所以这里不全是我们所要爬取的网址,而要经过中间的一些过程)
- data 参数是可选的,如果要添加 data ,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 函数可以进行转化,另外如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST 。
- timeout 参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP 、 HTTPS 、 FTP 请求。
- 其他参数 还有 context 参数,它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。cafile 和 capath 两个参数是指定CA证书和它的路径,这个在请求 HTTPS 链接时会有用。
- cadefault 参数现在已经弃用了,默认为 False 。
看不懂没关系,实战是最好的学习方式,看完这篇文章,我相信你应该对爬虫有个概念,那么我们会在接下来几个章节进行一系列爬虫实战练习,在实战中成长。
参考资料
- [1] 崔庆才 《Python3网络爬虫开发实战》