zoukankan      html  css  js  c++  java
  • 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,打印出来周末在家慢慢读,这是我下一步要做的教程,大家敬请期待

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

  • 相关阅读:
    简单明了的带你理解springboot原理和三大核心注解
    Spring Boot(一):入门篇
    【Mysql优化】聚簇索引与非聚簇索引概念
    Mysql索引原理与优化
    Mysql全文索引的使用
    索引的优缺点,如何创建索引
    184 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 04 例:字符串与byte(即:字节)数组间的相互转换
    183 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下)
    182 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 02 String常用方法(上)
    181 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 01 String常用方法简介
  • 原文地址:https://www.cnblogs.com/shengxinjing/p/5039303.html
Copyright © 2011-2022 走看看