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,打印出來週末在家慢慢讀,這是我下一步要作的教程,你們敬請期待

以上,都是在命令行裏執行的 我寫代碼的間隙,執行一下命令,就能夠看下母校的十大,關注一下學校最近的情況,不耽誤時間哦

相關文章
相關標籤/搜索