小爬虫1.0

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

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

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

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

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

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

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

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

# coding=utf-8

import requests

url = '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-8

import requestsfrom pyquery import PyQuery as pq

url = '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-8

import requests
from pyquery import PyQuery as pq

url = '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-8

import requests
from pyquery import PyQuery as pq

url = '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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值