小爬虫1.0

来源:互联网 发布:北部战区山东知乎 编辑:程序博客网 时间:2024/05/16 15:45

关于爬虫,写点简单的吧,比如命令行里看论坛的十大

我是北交大毕业的,所以这里就拿自己学校练手吧—— 知行论坛。大家学会方法后,爬什么都很easy啦。用简单的代码,说明简单爬虫的原理即可。

基本所有学校论坛,都有一个十大模块,我们学校也不例外,也是我比较关注的,我们就写个脚本爬一下十大列表吧。

图里红色方块,就是我关心的部分。在写爬虫之前,我们先来普及一下基础知识,我们看到的网站,是红红绿绿,挺好看的。但是代码看来,其实就是一大串字符构成,比如我们新建一个文件,zhixing.html,注意,一定要用.html结尾,用文本编辑器打开,输入以下内容:

name:<input type="text"><input type="button" value="click me">

然后双击,浏览器会打开这个页面,你就会看到一个输入框,和一个按钮,见下图,这就是最简单的html:

所以我们用代码去抓各种网站,代码其实看到的,就是一堆html标签,我们需要做的,就是从标签里面解析出我们想要的内容,并且输出。

我们需要Pythonrequests模块来发送请求,用pyquery来解析数据

# coding=utf-8import requestsurl = 'http://zhixing.bjtu.edu.cn/portal.php'r = requests.get(url)print r.text

这几行代码抓取的内容,应该和大家在浏览器里 右键->查看源代码看到的东西是一样的。

我们已经获取和网页的内容,肿么拿到十大的内容呢

复杂的html结构,各种层级嵌套,如果想自己写一个解析html的工具,估计还没学会编程就直接狗带了。我们一定要善于使用现有的工具,比如我很喜欢的pyquery:

- pyquery是python的一个模块,使用jquery的语法解析html文档

身为一个前端工程师,对pyquery简直毫无抵抗力。看代码之前,给大家再普及一下,我们在chrome里右键->审查元素(或者点F12),就可以看到浏览器的元素层级结构(具体见下图)。我们通过html元素的id或者class属性找到元素即可。

先看下F12页面,比如我们查看头部的banner广告:

再看十大对应的标签位置:

找到了两个模块的id,聚焦的id是portal_block_654,十大的是portal_block_617

再深入寻找十大标题的具体标签,见下图:

我们找到了具体的标签,通俗易懂的方式就是,网页里面,id是portal_block_617和标签下面的li标签,下面的a标签就是:

- 找id的语法,是#,class是小数点. 标签就是标签名,这是juqey的基本语法,这些基础内容可以直接百度

代码呼之欲出:

# coding=utf-8import requestsfrom pyquery import PyQuery as pqurl = 'http://zhixing.bjtu.edu.cn/portal.php'r = requests.get(url)p = pq(r.text).find('#portal_block_617 li>a')for d in p:    print pq(d).text()

效果如图:

我们已经成功拿到标题啦!如果想加上今日聚焦,今日聚焦和十大的标签结构有点不太一样,是table包起来的,所以只需要稍微改一下下。代码如下,主要是find的地方不太一样:

# coding=utf-8import requestsfrom pyquery import PyQuery as pqurl = 'http://zhixing.bjtu.edu.cn/portal.php'r = requests.get(url)p = pq(r.text).find('#portal_block_654 table a')for d in p:    print pq(d).text()

执行效果如下:

Bingo!稍微扩展一下上面的代码,把每个十大的链接地址拿出来(今日聚焦的自己扩展吧)

# coding=utf-8import requestsfrom pyquery import PyQuery as pqurl = 'http://zhixing.bjtu.edu.cn/portal.php'r = requests.get(url)p = pq(r.text).find('#portal_block_617 li>a')for d in p:    print pq(d).text()        print 'http://zhixing.bjtu.edu.cn/'+pq(d).attr('href')

效果如下:

最终结果:

今天舍友推荐了首神曲,超越《忐忑》http://zhixing.bjtu.edu.cn/thread-976923-1-1.html咱们交大部分人素质真心不敢恭维http://zhixing.bjtu.edu.cn/thread-976951-1-1.html大摆长裙如何愉快滴坐下http://zhixing.bjtu.edu.cn/thread-976887-1-1.html积分增长这么慢,何日才能升级啊。。。http://zhixing.bjtu.edu.cn/thread-976954-1-1.html求推介高清电影论坛http://zhixing.bjtu.edu.cn/thread-976901-1-1.html我双十一的包裹终于到北京辣~\(≧▽≦)/~http://zhixing.bjtu.edu.cn/thread-976912-1-1.html【论】别人家的学校~http://zhixing.bjtu.edu.cn/thread-976966-1-1.html我觉得知行应该搞一个板块叫过往的十大http://zhixing.bjtu.edu.cn/thread-976946-1-1.html我觉得在宿舍拖凳子声音应该小点http://zhixing.bjtu.edu.cn/thread-976928-1-1.html免费的论文查重网站http://zhixing.bjtu.edu.cn/thread-976970-1-1.html

今天的第一部分先到这里,我们已经拿到了链接地址,就可以继续去抓帖子的具体地址。还可以根据用户选择,去查看不同帖子的内容,甚至还可以发帖和恢复,但是有一个问题,那就是:

- 知行的帖子查看是需要登录的,我们现在直接抓,只会抓到让你登录的信息

我们需要一个东西叫做cookie,我们的登录信息都存放在cookie里面,我们抓取网页的时候,带上登录信息,就像咱们的一卡通一样,不带卡进宿舍楼,就会被拦着,带着一卡通就可以畅通无阻啦。我们就需要带着登录的cookie去抓十大的具体信息就OK啦。

后续教程:

  • 模拟登录,抓取十大具体的帖子内容

  • 简单的回复帖子

  • 把十大的信息汇总,生成pdf

  • 会抓取信息,后续扩展就很多啦,比如爬知乎的文章,爬天气预报,然后汇总一下,给自己发邮件都是很easy的啦

  • 利用新浪微博的接口,做一个命令行版的微博,命令行里就可以刷微博

  • 比如知乎上的PC大大,是我很崇拜的,可以把他的专栏 “面向工资编程”的所有文章都爬下来,拼接一下,自动生成一个pdf,打印出来周末在家慢慢读,这个是我下一步要做的教程,大家敬请期待。

以上,都是在命令行里执行的 ,我写代码的间隙,执行一下命令,就可以看下母校的十大,关注一下学校最近的状况,不耽误时间哦!!

0 0
原创粉丝点击