聽說去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拉
後續教程:
以上,都是在命令行裏執行的 我寫代碼的間隙,執行一下命令,就能夠看下母校的十大,關注一下學校最近的情況,不耽誤時間哦