前言:
之前一直對(duì)于爬蟲有一定興趣,最近剛好為了搞算法.自學(xué)了python.經(jīng)過(guò)昨天幾個(gè)小時(shí)的研究.又借用了大家陽(yáng)光長(zhǎng)跑不改密碼的優(yōu)良作風(fēng).爬出了大概有1800多條數(shù)據(jù).下面將一下具體思路.
思路:
網(wǎng)站地址:
首先看界面(大體了解如何進(jìn)行登陸)
我們可以發(fā)現(xiàn).就是簡(jiǎn)單的用戶名和密碼登錄.
看HTML源碼:
網(wǎng)站是采用bootstarp(沒有軟用的信息)
重點(diǎn):最簡(jiǎn)單的form表單.兩個(gè)參數(shù) username 和 password 請(qǐng)求地址就是當(dāng)前地址本身.(并沒有驗(yàn)證碼!!!減輕我識(shí)別驗(yàn)證碼的壓力!!)
基本了解問(wèn)題.下面開始解決
實(shí)現(xiàn)步驟:
導(dǎo)入python相應(yīng)的模塊
import requests
import pymysql
from bs4 import BeautifulSoup
大概的流程是讀取相應(yīng)的數(shù)據(jù)之后,存放到數(shù)據(jù)庫(kù)當(dāng)中
偽造請(qǐng)求頭
headers = {'content-type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
從數(shù)據(jù)庫(kù)讀取學(xué)號(hào).獲得集合,進(jìn)行遍歷(不要問(wèn)我我學(xué)號(hào)哪里來(lái)這么多的
- 編寫相應(yīng)的模擬登陸函數(shù)(login_website),進(jìn)行模擬登陸
這一塊是最重點(diǎn)的地方.首先我發(fā)現(xiàn)登陸成功之后,會(huì)有一個(gè)重定向.我禁止了重定向.發(fā)現(xiàn)在登錄的時(shí)候會(huì)產(chǎn)生一個(gè)cookieId.如下圖.
經(jīng)過(guò)測(cè)試.如果不傳入這個(gè)cookieid就無(wú)法實(shí)現(xiàn)登陸.
之后,通過(guò)相應(yīng)的字符串解析.得到了這個(gè)id.
使用get請(qǐng)求加傳入cookie數(shù)據(jù).即可獲取到登陸成功之后的界面(就是下面的地址) http://hzaspt.sunnysport.org.cn/runner/index.html
- 解析HTML數(shù)據(jù)
具體流程就不說(shuō)了.就是通過(guò)解析標(biāo)簽找規(guī)律的方式.展示下代碼:
6.封裝數(shù)據(jù).
新建了想應(yīng)的類和數(shù)據(jù)庫(kù)表
最終要時(shí)刻到了.就是把獲取的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)當(dāng)中,也就是下面的代碼
把相應(yīng)的數(shù)據(jù)存入到了數(shù)據(jù)庫(kù)當(dāng)中.
之后程序繼續(xù)循環(huán).直到完成所有的學(xué)生學(xué)號(hào)停止(一共獲取到了1800多個(gè)學(xué)生的信息),出于保密.隱藏姓名.
拿到了這些數(shù)據(jù).就可以做很多事,比如分析學(xué)生平均速度等等...
數(shù)據(jù)不公布呢~
總結(jié):
至此,基本思路都以說(shuō)明.學(xué)習(xí)Python一個(gè)星期左右.基本的東西編程語(yǔ)言都差不多.Pyhton作為非常高級(jí)的語(yǔ)言.我學(xué)習(xí)的這一段時(shí)間有兩點(diǎn)明顯的感受.
1.代碼短,非常的精練.同樣的代碼JAVA的代碼遠(yuǎn)遠(yuǎn)多于Python
2.第三方庫(kù)非常厲害!我使用了requests,這比Pyhton自帶的庫(kù)好用多了.
3.源碼已經(jīng)開源~(https://github.com/egdw/SunnyRunCrawlerCForPython)