python 10 min系列三之小爬虫(一)

python10min系列之小爬虫

前一篇可视化你们表示有点难,写点简单的把,好比命令行里看论坛的十大,你们也能够扩展为抓博客园的首页文章

本文原创,同步发布在个人github

听说去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拉

后续教程:

  • 模拟登陆,抓取十大具体的帖子内容
  • 简单的回复帖子
  • 把十大的信息汇总,生成pdf
  • 会抓取信息,后续扩展就不少啦,好比爬知乎的文章,爬天气预报,而后汇总一下,给本身发邮件都是很easy的拉
  • 利用新浪微博的接口,作一个命令行版的微博,命令行里就能够刷微博
  • 好比知乎上的PC大大,是我很崇拜的,能够把他的专栏 面向工资编程的全部文章都爬下来,拼接一下,自动生成一个pdf,打印出来周末在家慢慢读,这是我下一步要作的教程,你们敬请期待

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

相关文章
相关标签/搜索