|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 101℃太阳 于 2016-4-21 19:44 编辑
自己在一个人的时候一定要有一个规划,不然时间会过得非常快。!!!别问为什么————我是一个月前就计划写这篇文章的
导论:
本篇主要对 小甲鱼一带而过的内容进行深刻解读,会有部分内容与甲鱼的视频内容重复,适合已经跟着视频做完一遍的同学进行复习使用,如果视频还没看完,请乖乖看视频。Python版本3+
为什么选择python写爬虫:
爬虫不一定是只有python才能,JAVA,C++都可以。但为什么市面上大多是python的爬虫呢?因为小甲鱼写的python视频啊 ← ←(大雾)。因为python 写起来轻便且比较严谨。最重要的:流行库又非常多!.所以我们用python去写。
弱化针对计算机运行速度的优化, 强化为程序员容易思考容易编写 而改进的语言,我们为什么不用?而且我觉得在目前硬件对开发影响不太大的环境下python在编写速度开发效率上胜过其他语言(并不是想引战)
抓取页面信息:
小甲鱼的视频,照葫芦画瓢,我想最后大家应该都可以自己“写”一个抓取妹子图的脚本吧,但是他的原理是什么,每个关键词的用法你是否都搞清楚了?照葫芦画瓢,只能开发出相似的脚本,理解为什么要这样做,才可以真正举一反三
回忆一下,抓取页面用什么?
对,用urllib。urllib.request是一个包。urllib 是由
1. request(用来打开读取URL)
2. error (解决由request报错产生的问题)
3. parse (用来解码url的)
4. robotparse ( 用来解析 爬虫协议(robots.txt)的,一般网站通过Robots协议告诉baidu啊这些搜索引擎 哪些是可以抓的哪些不可以)
相关文档在python的帮助页面可以搜索到,我知道你们懒← ← 在下面贴好了文档,可以进去看下。
Urllib Python官方文档
好了,既然你打开了官方文档,我们就开始读文档了。
点进 urllib.request ,
标题就说了
The urllib.request module defines functions and classes which help in opening URLs @#$%^&*(#$%^&*(....
管他呢,往下看,会发现首先介绍的是urlopen函数,读完。
然后写一份读后感交给太阳(大雾)
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
这个urlopen会返回一个 http.client.HTTPResponse 对象。这些对象又对应好多用法,比如小甲鱼用到的read(),getheader()等等方法
具体的用法呢,小甲鱼没有给出,在这里我找到了官方的文档。
HTTPResponse对象用法文档
太阳知道你们不会细看...
直接上例子
>>> import urllib.request
>>> url = 'http://www.fishc.com/'
>>> fishc = urllib.request.urlopen(url)
>>>
>>> fishc.geturl()
'http://www.fishc.com/'
>>> type(fishc)
<class 'http.client.HTTPResponse'> #这里得到的就是对象的类型
>>>fishc.info()
<http.client.HTTPMessage object at 0x03137B50>
>>>fishc.getheaders() # 会获得网站的headers ,太多不写了.
>>> fishc.getcode()
200 #不错,记忆力挺好的,200是正常的意思.
那我们继续,会打开网页,接下来就是如何修改你的浏览属性了。也就是Data信息。
Data一定是一个字典(文档中有说)!!!!
Data信息的添加,参考 小甲鱼 有道词典翻译的例子。
对于data信息 太阳测试过,I 对应的事你需要翻译的 字符串。这个是必要的,还有一个必须要添加的是‘doctype’对应的是'json'
也就是告诉有道,我是json编码的。其余的我删掉后并不影响运行,应该是默认的都可以,这点有待考证。@小甲鱼 @~风介~
之后你会发现一个细节,小甲鱼将data 进行 encode然后覆盖。
我们将编码前后的Data打印出来对比 就清楚了
请输入需要翻译的内容:i love fishc
{'i': 'i love fishc', 'doctype': 'json'} #编码前打印
b'i=i+love+fishc&doctype=json' #编码后打印
翻译结果:我爱fishc
看样子是翻译成了一个二进制的编码形式.
如何隐藏和使用代理,小甲鱼讲的很详细 还引入Time模块,
在这里不做赘述。换言之,照着做就行了(我没读文档 ← ←)
正则表达式
让自己的爬虫更具有一般性!
首先,我们知道,python爬虫爬回来的东西 是一个字符串b'#$%^&*',解码之后还是字符串。
而我们爬虫要做的就是 从这些字符串当中找出我们想要的有规律的数据。而这些都是正则表达式才能做到的。
这也就是小甲鱼为什么要讲正则表达式的原因。
正则表达式的功能很强大,需要慢慢去熟练,才能巧妙运用。但是对于目前的爬虫来说,找出url还有ip就好啦← ←
课后作业有没有好好做?!
《未完待续》 |
评分
-
查看全部评分
|