听说去github右上角先给个star再看,能掌握博客代码的100% 哈哈php
我是北交大的,因此就拿本身学校练手吧 知行论坛,你们学会方法后,爬什么都很easy啦,用简单的代码,说明简单爬虫的原理便可html
文章代码地址前端
基本全部学校论坛,都有一个十大模块,咱们学校也不例外,也是我比较关注的,咱们就写个脚本爬一下十大列表吧python
图里红色方块,就是我关心的部分,在写爬虫以前,咱们先来普及一下基础知识,咱们看到的网站,是红红绿绿,挺好看的,可是代码看来,其实就是一大串字符构成,好比咱们新建一个文件,zhixing.html,注意,必定要用.html结尾,用文本编辑器打开,输入如下内容jquery
name:<input type="text"> <input type="button" value="click me">
而后双击,浏览器会打开这个页面,你就会看到一个输入框,和一个按钮,见下图,这就是最简单的htmlgit
因此咱们用代码去抓各类网站,代码其实看到的,就是一堆html标签,咱们须要作的,就是从标签里面解析出咱们想要的内容,而且输出github
咱们须要python的requests模块来发送请求,用pyquery来解析数据chrome
# 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 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()
效果如图 不动戳大
咱们已经成功拿到标题啦,若是想加上今日聚焦,今日聚焦和十大的标签结构有点不太同样,是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拉
后续教程:
以上,都是在命令行里执行的 我写代码的间隙,执行一下命令,就能够看下母校的十大,关注一下学校最近的情况,不耽误时间哦