日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

零基础python爬虫_零基础写python爬虫之爬虫编写全记录

發(fā)布時間:2025/4/17 python 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础python爬虫_零基础写python爬虫之爬虫编写全记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來說一下我們學(xué)校的網(wǎng)站:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

查詢成績需要登錄,然后顯示各學(xué)科成績,但是只顯示成績而沒有績點,也就是加權(quán)平均分。

顯然這樣手動計算績點是一件非常麻煩的事情。所以我們可以用python做一個爬蟲來解決這個問題。

1.決戰(zhàn)前夜

先來準(zhǔn)備一下工具:HttpFox插件。

這是一款http協(xié)議分析插件,分析頁面請求和響應(yīng)的時間、內(nèi)容、以及瀏覽器用到的COOKIE等。

以我為例,安裝在火狐上即可,效果如圖:

可以非常直觀的查看相應(yīng)的信息。

點擊start是開始檢測,點擊stop暫停檢測,點擊clear清除內(nèi)容。

一般在使用之前,點擊stop暫停,然后點擊clear清屏,確保看到的是訪問當(dāng)前頁面獲得的數(shù)據(jù)。

2.深入敵后

下面就去山東大學(xué)的成績查詢網(wǎng)站,看一看在登錄的時候,到底發(fā)送了那些信息。

先來到登錄頁面,把httpfox打開,clear之后,點擊start開啟檢測:

輸入完了個人信息,確保httpfox處于開啟狀態(tài),然后點擊確定提交信息,實現(xiàn)登錄。

這個時候可以看到,httpfox檢測到了三條信息:

這時點擊stop鍵,確保捕獲到的是訪問該頁面之后反饋的數(shù)據(jù),以便我們做爬蟲的時候模擬登陸使用。

3.庖丁解牛

乍一看我們拿到了三個數(shù)據(jù),兩個是GET的一個是POST的,但是它們到底是什么,應(yīng)該怎么用,我們還一無所知。

所以,我們需要挨個查看一下捕獲到的內(nèi)容。

先看POST的信息:

既然是POST的信息,我們就直接看PostData即可。

可以看到一共POST兩個數(shù)據(jù),stuid和pwd。

并且從Type的Redirect to可以看出,POST完畢之后跳轉(zhuǎn)到了bks_login2.loginmessage頁面。

由此看出,這個數(shù)據(jù)是點擊確定之后提交的表單數(shù)據(jù)。

點擊cookie標(biāo)簽,看看cookie信息:

沒錯,收到了一個ACCOUNT的cookie,并且在session結(jié)束之后自動銷毀。

那么提交之后收到了哪些信息呢?

我們來看看后面的兩個GET數(shù)據(jù)。

先看第一個,我們點擊content標(biāo)簽可以查看收到的內(nèi)容,是不是有一種生吞活剝的快感-。-HTML源碼暴露無疑了:

看來這個只是顯示頁面的html源碼而已,點擊cookie,查看cookie的相關(guān)信息:

啊哈,原來html頁面的內(nèi)容是發(fā)送了cookie信息之后才接受到的。

再來看看最后一個接收到的信息:

大致看了一下應(yīng)該只是一個叫做style.css的css文件,對我們沒有太大的作用。

4.冷靜應(yīng)戰(zhàn)

既然已經(jīng)知道了我們向服務(wù)器發(fā)送了什么數(shù)據(jù),也知道了我們接收到了什么數(shù)據(jù),基本的流程如下:

首先,我們POST學(xué)號和密碼--->然后返回cookie的值然后發(fā)送cookie給服務(wù)器--->返回頁面信息。獲取到成績頁面的數(shù)據(jù),用正則表達式將成績和學(xué)分單獨取出并計算加權(quán)平均數(shù)。

OK,看上去好像很簡單的樣紙。那下面我們就來試試看吧。

但是在實驗之前,還有一個問題沒有解決,就是POST的數(shù)據(jù)到底發(fā)送到了哪里?

再來看一下當(dāng)初的頁面:

很明顯是用一個html框架來實現(xiàn)的,也就是說,我們在地址欄看到的地址并不是右邊提交表單的地址。

那么怎樣才能獲得真正的地址-。-右擊查看頁面源代碼:

嗯沒錯,那個name="w_right"的就是我們要的登錄頁面。

網(wǎng)站的原來的地址是:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

所以,真正的表單提交的地址應(yīng)該是:

http://jwxt.sdu.edu.cn:7777/zhxt_bks/xk_login.html

輸入一看,果不其然:

靠居然是清華大學(xué)的選課系統(tǒng)。。。目測是我校懶得做頁面了就直接借了。。結(jié)果連標(biāo)題都不改一下。。。

但是這個頁面依舊不是我們需要的頁面,因為我們的POST數(shù)據(jù)提交到的頁面,應(yīng)該是表單form的ACTION中提交到的頁面。

也就是說,我們需要查看源碼,來知道POST數(shù)據(jù)到底發(fā)送到了哪里:

嗯,目測這個才是提交POST數(shù)據(jù)的地址。

整理到地址欄中,完整的地址應(yīng)該如下:

http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login

(獲取的方式很簡單,在火狐瀏覽器中直接點擊那個鏈接就能看到這個鏈接的地址了)

5.小試牛刀

接下來的任務(wù)就是:用python模擬發(fā)送一個POST的數(shù)據(jù)并取到返回的cookie值。

關(guān)于cookie的操作可以看看這篇博文:

我們先準(zhǔn)備一個POST的數(shù)據(jù),再準(zhǔn)備一個cookie的接收,然后寫出源碼如下:

# -*- coding: utf-8 -*-

#---------------------------------------

#?? 程序:山東大學(xué)爬蟲

#?? 版本:0.1

#?? 作者:why

#?? 日期:2013-07-12

#?? 語言:Python 2.7

#?? 操作:輸入學(xué)號和密碼

#?? 功能:輸出成績的加權(quán)平均值也就是績點

#---------------------------------------

import urllib

import urllib2

import cookielib

cookie = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

#需要POST的數(shù)據(jù)#

postdata=urllib.urlencode({

'stuid':'201100300428',

'pwd':'921030'

})

#自定義一個請求#

req = urllib2.Request(

url = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login',

data = postdata

)

#訪問該鏈接#

result = opener.open(req)

#打印返回的內(nèi)容#

print result.read()

如此這般之后,再看看運行的效果:

ok,如此這般,我們就算模擬登陸成功了。

6.偷天換日

接下來的任務(wù)就是用爬蟲獲取到學(xué)生的成績。

再來看看源網(wǎng)站。

開啟HTTPFOX之后,點擊查看成績,發(fā)現(xiàn)捕獲到了如下的數(shù)據(jù):

點擊第一個GET的數(shù)據(jù),查看內(nèi)容可以發(fā)現(xiàn)Content就是獲取到的成績的內(nèi)容。

而獲取到的頁面鏈接,從頁面源代碼中右擊查看元素,可以看到點擊鏈接之后跳轉(zhuǎn)的頁面(火狐瀏覽器只需要右擊,“查看此框架”,即可):

從而可以得到查看成績的鏈接如下:

http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre

7.萬事俱備

現(xiàn)在萬事俱備啦,所以只需要把鏈接應(yīng)用到爬蟲里面,看看能否查看到成績的頁面。

從httpfox可以看到,我們發(fā)送了一個cookie才能返回成績的信息,所以我們就用python模擬一個cookie的發(fā)送,以此來請求成績的信息:

# -*- coding: utf-8 -*-

#---------------------------------------

#?? 程序:山東大學(xué)爬蟲

#?? 版本:0.1

#?? 作者:why

#?? 日期:2013-07-12

#?? 語言:Python 2.7

#?? 操作:輸入學(xué)號和密碼

#?? 功能:輸出成績的加權(quán)平均值也就是績點

#---------------------------------------

import urllib

import urllib2

import cookielib

#初始化一個CookieJar來處理Cookie的信息#

cookie = cookielib.CookieJar()

#創(chuàng)建一個新的opener來使用我們的CookieJar#

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

#需要POST的數(shù)據(jù)#

postdata=urllib.urlencode({

'stuid':'201100300428',

'pwd':'921030'

})

#自定義一個請求#

req = urllib2.Request(

url = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login',

data = postdata

)

#訪問該鏈接#

result = opener.open(req)

#打印返回的內(nèi)容#

print result.read()

#打印cookie的值

for item in cookie:

print 'Cookie:Name = '+item.name

print 'Cookie:Value = '+item.value

#訪問該鏈接#

result = opener.open('http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre')

#打印返回的內(nèi)容#

print result.read()

按下F5運行即可,看看捕獲到的數(shù)據(jù)吧:

既然這樣就沒有什么問題了吧,用正則表達式將數(shù)據(jù)稍稍處理一下,取出學(xué)分和相應(yīng)的分數(shù)就可以了。

8.手到擒來

這么一大堆html源碼顯然是不利于我們處理的,下面要用正則表達式來摳出必須的數(shù)據(jù)。

關(guān)于正則表達式的教程可以看看這個博文:

我們來看看成績的源碼:

既然如此,用正則表達式就易如反掌了。

我們將代碼稍稍整理一下,然后用正則來取出數(shù)據(jù):

# -*- coding: utf-8 -*-

#---------------------------------------

#?? 程序:山東大學(xué)爬蟲

#?? 版本:0.1

#?? 作者:why

#?? 日期:2013-07-12

#?? 語言:Python 2.7

#?? 操作:輸入學(xué)號和密碼

#?? 功能:輸出成績的加權(quán)平均值也就是績點

#---------------------------------------

import urllib

import urllib2

import cookielib

import re

class SDU_Spider:

# 申明相關(guān)的屬性

def __init__(self):

self.loginUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login'?? # 登錄的url

self.resultUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre' # 顯示成績的url

self.cookieJar = cookielib.CookieJar()????????????????????????????????????? # 初始化一個CookieJar來處理Cookie的信息

self.postdata=urllib.urlencode({'stuid':'201100300428','pwd':'921030'})???? # POST的數(shù)據(jù)

self.weights = []?? #存儲權(quán)重,也就是學(xué)分

self.points = []??? #存儲分數(shù),也就是成績

self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))

def sdu_init(self):

# 初始化鏈接并且獲取cookie

myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata)?? # 自定義一個請求

result = self.opener.open(myRequest)??????????? # 訪問登錄頁面,獲取到必須的cookie的值

result = self.opener.open(self.resultUrl)?????? # 訪問成績頁面,獲得成績的數(shù)據(jù)

# 打印返回的內(nèi)容

# print result.read()

self.deal_data(result.read().decode('gbk'))

self.print_data(self.weights);

self.print_data(self.points);

# 將內(nèi)容從頁面代碼中摳出來

def deal_data(self,myPage):

myItems = re.findall('

.*?(.*?).*?(.*?).*?',myPage,re.S)???? #獲取到學(xué)分

for item in myItems:

self.weights.append(item[0].encode('gbk'))

self.points.append(item[1].encode('gbk'))

# 將內(nèi)容從頁面代碼中摳出來

def print_data(self,items):

for item in items:

print item

#調(diào)用

mySpider = SDU_Spider()

mySpider.sdu_init()

水平有限,,正則是有點丑,。運行的效果如圖:

ok,接下來的只是數(shù)據(jù)的處理問題了。。

9.凱旋而歸

完整的代碼如下,至此一個完整的爬蟲項目便完工了。

# -*- coding: utf-8 -*-

#---------------------------------------

#?? 程序:山東大學(xué)爬蟲

#?? 版本:0.1

#?? 作者:why

#?? 日期:2013-07-12

#?? 語言:Python 2.7

#?? 操作:輸入學(xué)號和密碼

#?? 功能:輸出成績的加權(quán)平均值也就是績點

#---------------------------------------

import urllib

import urllib2

import cookielib

import re

import string

class SDU_Spider:

# 申明相關(guān)的屬性

def __init__(self):

self.loginUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login'?? # 登錄的url

self.resultUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre' # 顯示成績的url

self.cookieJar = cookielib.CookieJar()????????????????????????????????????? # 初始化一個CookieJar來處理Cookie的信息

self.postdata=urllib.urlencode({'stuid':'201100300428','pwd':'921030'})???? # POST的數(shù)據(jù)

self.weights = []?? #存儲權(quán)重,也就是學(xué)分

self.points = []??? #存儲分數(shù),也就是成績

self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))

def sdu_init(self):

# 初始化鏈接并且獲取cookie

myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata)?? # 自定義一個請求

result = self.opener.open(myRequest)??????????? # 訪問登錄頁面,獲取到必須的cookie的值

result = self.opener.open(self.resultUrl)?????? # 訪問成績頁面,獲得成績的數(shù)據(jù)

# 打印返回的內(nèi)容

# print result.read()

self.deal_data(result.read().decode('gbk'))

self.calculate_date();

# 將內(nèi)容從頁面代碼中摳出來

def deal_data(self,myPage):

myItems = re.findall('

.*?(.*?).*?(.*?).*?',myPage,re.S)???? #獲取到學(xué)分

for item in myItems:

self.weights.append(item[0].encode('gbk'))

self.points.append(item[1].encode('gbk'))

#計算績點,如果成績還沒出來,或者成績是優(yōu)秀良好,就不運算該成績

def calculate_date(self):

point = 0.0

weight = 0.0

for i in range(len(self.points)):

if(self.points[i].isdigit()):

point += string.atof(self.points[i])*string.atof(self.weights[i])

weight += string.atof(self.weights[i])

print point/weight

#調(diào)用

mySpider = SDU_Spider()

mySpider.sdu_init()

以上便是此爬蟲誕生的全部過程的詳細記錄了,有沒有很神奇的趕腳??哈哈,開個玩笑,需要的朋友參考下吧,自由擴展

總結(jié)

以上是生活随笔為你收集整理的零基础python爬虫_零基础写python爬虫之爬虫编写全记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品亚洲精品 | 日本一级吃奶淫片免费 | 国产精品综合网 | 99热中文| 秋霞影院午夜 | 91福利专区 | 国产一区免费 | 蜜桃久久精品成人无码av | 午夜家庭影院 | 佐山爱av在线 | 娇妻第一次尝试交换的后果 | 亚洲午夜福利一区二区三区 | 国产高清精品在线 | 99国产在线播放 | 成人影片在线播放 | 亚洲一区二区中文 | 玉女心经 在线 | 色婷婷av一区二区三区软件 | 国内自拍偷拍 | 久久免费国产 | 日韩精品一区二 | 日本黄色免费观看 | 天天操天天插天天射 | 精品视频国产 | 777亚洲| 另类天堂 | 久久影视一区二区 | 一区二区三区国产在线观看 | 韩国av一区二区三区 | 女人被男人躁得好爽免费视频 | 性欧美激情 | 97在线观看视频免费 | 国产精品呦呦 | 亚洲AV无码AV吞精久久中文版 | 亚洲女同志亚洲女同女播放 | 日韩狠狠 | 69视频免费在线观看 | 在线成人看片 | 超碰资源| 麻豆网站在线播放 | 日本啪啪片 | 国产天堂 | 国产一区麻豆 | 久久露脸国语精品国产 | 欧美激情黑白配 | 午夜剧场在线 | 欧美亚洲一区二区三区 | 欧美激情 国产精品 | 色桃av| 免费亚洲婷婷 | 看免费黄色大片 | 福利一区福利二区 | 日韩作爱视频 | www嫩草| 绝顶高潮videos合集 | 久久久噜噜噜久久 | 香蕉亚洲| 91毛片视频| 欧美大片高清免费观看 | 国产www在线 | 亚洲在线一区 | a在线播放| 熟妇大屁股一区二区三区视频 | 操老女人视频 | 在线中文字幕一区 | 日韩av网址在线观看 | 在线免费日本 | 经典三级av在线 | 亚洲天堂av电影 | 国产精品日韩av | 99在线精品视频免费观看软件 | 神马久久网 | 国产老女人精品毛片久久 | 日韩av网站在线观看 | 91久久国产综合久久91 | 久久久久亚洲av片无码下载蜜桃 | 综合网视频 | 四虎av网站| av一起看香蕉 | 嫩草av在线 | 在线不卡的av | 亚洲黄色激情 | 国内精品小视频 | 天天激情 | 牛牛视频在线 | 久久久男人的天堂 | 一区二区三区精品在线观看 | 韩日精品中文字幕 | 强公把我次次高潮hd | 国产一级淫片a视频免费观看 | 动漫大乳美女 | av中文字幕av | 日本美女动态图 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 秋霞黄色网 | 久久国产精品久久久久久 | 精品深夜av无码一区二区老年 | 国产美女精品视频 | 日本一区二区三区视频免费看 |