python 10 min系列三之小爬虫(一)
python10min系列之小爬虫
前一篇可视化大家表示有点难,写点简单的把,比如命令行里看论坛的十大,大家也可以扩展为抓博客园的首页文章
本文原创,同步发布在我的github上
据说去github右上角先给个star再看,能掌握博客代码的100% 哈哈
我是北交大的,所以就拿自己学校练手吧 知行论坛,大家学会方法后,爬什么都很easy啦,用简单的代码,说明简单爬虫的原理即可
基本所有学校论坛,都有一个十大模块,我们学校也不例外,也是我比较关注的,我们就写个脚本爬一下十大列表吧

图里红色方块,就是我关心的部分,在写爬虫之前,我们先来普及一下基础知识,我们看到的网站,是红红绿绿,挺好看的,但是代码看来,其实就是一大串字符构成,比如我们新建一个文件,zhixing.html,注意,一定要用.html结尾,用文本编辑器打开,输入以下内容
name:<input type="text">
<input type="button" value="click me">
然后双击,浏览器会打开这个页面,你就会看到一个输入框,和一个按钮,见下图,这就是最简单的html

所以我们用代码去抓各种网站,代码其实看到的,就是一堆html标签,我们需要做的,就是从标签里面解析出我们想要的内容,并且输出
我们需要python的requests模块来发送请求,用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 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,打印出来周末在家慢慢读,这是我下一步要做的教程,大家敬请期待
以上,都是在命令行里执行的 我写代码的间隙,执行一下命令,就可以看下母校的十大,关注一下学校最近的状况,不耽误时间哦
python 10 min系列三之小爬虫(一)的更多相关文章
- 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)
用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气
- Python基础笔记系列三:list列表
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...
- Python自然语言处理 - 系列三
有监督分类过程 ![enter image description here][1]例子:涉及一个特征器,给定一个姓名分析出是男性名字还是女性名字 分析:男性和女性的名字有一些鲜明的特点.以a,e 和 ...
- 放养的小爬虫--京东定向爬虫(AJAX获取价格数据)
放养的小爬虫--京东定向爬虫(AJAX获取价格数据) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wang/Sp ...
- 爬虫系列(三) urllib的基本使用
一.urllib 简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是 request:请求处理模 ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- Python 基于学习 网络小爬虫
<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml( ...
- Python爬虫01——第一个小爬虫
Python小爬虫——贴吧图片的爬取 在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写. 目标: 首先肯定要实现图片抓取这个基本功能 然后实现对用户所给的链接进行抓取 最后要有一定的 ...
- Python 学习(1) 简单的小爬虫
最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~ 人工挑眼都挑花了. 用的IDE是PyCh ...
随机推荐
- hdu 2102 A计划(双层BFS)(具体解释)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...
- 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统
上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...
- ASP连接sql server实例解析
1.首先确定自己的iis没有问题 2.其次确定自己sqlserver没有问题 然后在iis的文件夹wwwroot里,建立一个文件 名为testSqlServer.asp,编写代码例如以下就可以 < ...
- Matlab中用内建函数代替for循环
在使用matlab进行矩阵计算的时候,经常会遇到要使用for循环的情况.但其实很多操作可以用内部的一些函数代替. bsxfun, arrayfun, cellfun, spfun, structfun ...
- oracle习题SQL语句练习
表(一)Student (学生表) 属性名 数据类型 可否为空 含 义 Sno Varchar2(3) 否 学号(主码) Sname Varchar2(8) 否 学生姓名 Ssex Varchar2( ...
- C和C++运算符 (转)
这里是C和C++语言的运算符列表.所有列出的运算符皆含纳于C++:第三个栏目里的内容也使用C来描述.应当注意的是C不支持运算符重载. 下列运算符在两个语言中都是顺序点(运算符未重载时): && ...
- junit的安装和使用
一.junit的安装: junit-4.11.jar: http://www.java2s.com/Code/Jar/j/Downloadjunit411jar.htm hamcrest-core.j ...
- GridView分页功能的实现
当GridView中显示的记录很多的时候,可以通过GridView的分页功能来分页显示这些记录.如果GridView是直接绑定数据库,则很简单:将"启动分页"打勾即可. 如果是用代 ...
- HortonWorks
http://zh.hortonworks.com/products/hortonworks-sandbox/
- 闪存主控IC的作用
闪存主要是由闪存芯片.主控芯片.晶振.PCB板等部件组成的.其中主控芯片相当于闪存的“灵魂”,它控制着闪存的工作.主控芯片也是处理单元,在里面写入的程序对整个电路做控制.主控IC是把flash跟hos ...