python爬取靜態頁面示例 戰隊勝率統計

2021-10-04 21:03:14 字數 3505 閱讀 2072

靜態頁面的爬取十分簡單,直接瀏覽器在頁面上右鍵,選擇「檢視源**」,然後利用相關的庫和正規表示式就能把想要的內容直接爬取。

下面展示個我拿來解決問題的例項。

遊戲王線上戰隊聯盟有很多戰隊,hx是其中比較出名的乙個隊伍。hx戰隊每天都會和其他戰隊進行友誼賽,每一場都會有3個以上的隊員出戰。

每到月底,hx都會統計每個隊員的個人勝率。這也是令每個統計員頭疼的地方,因為每個月都有兩三百場友誼賽,每場都有3個以上的人。甚至有時候。。

首先開啟論壇,搜尋自己戰隊的戰報,會得到一連串的結果。檢視無誤。

然後右鍵檢視網頁源**。發現這是個很簡單的靜態頁面,所有的戰報內容全部顯示在**裡。還好這部分的html寫得還不算複雜,很快就能定位到其中的標籤。接下來就是常規的用正規表示式提取了。

但很明顯的,戰報不只是在乙個頁面裡,那如何實現翻頁呢。一般是觀察url的規律,然後通過迴圈來實現翻頁。下面就是url,雖然不知道它全部的意思,但還是能知道「groupname=」後面是戰隊名稱,「page=」後面的數字代表頁數。

思路已經有了,接下來就是用實現實現了。

import requests

import re

import pandas as pd

win=

#記錄贏的

lose=

#記錄輸的

novel=

open

('%s.txt'

%'戰報'

,'w'

,encoding=

'utf-8'

)yeshu=

11for t in

range(1

,yeshu)

: url=

""%"hx"

+"&a=sub&page=%s"

%t res = requests.get(url)

html = res.text #這樣html就是**文字了

#利用正規表示式提取需要的部分

dl = re.findall(r'(.*?)

', html, re.s)

for zhanbao in dl:

novel.write(zhanbao)

novel.write(

'\n'

)#下面是清洗資料

zhanbao = zhanbao.replace(''

,'') zhanbao = zhanbao.lower(

)# 變小寫,容易搞

all= zhanbao.split(

)# 以空格分隔

以上已經把戰報提取出來,並一一以空格作為分隔符將元素分開並儲存進列表裡。然後是統計勝率。所作工作是把所有人的勝場和敗場都算出來,然後以csv檔案輸出。

right =

0# 判斷hx是否在右邊,預設不是

flag=

1 i=

0while

(flag):if

(all

[i]==

'vs'):

# 通過判斷vs後面的元素,判斷hx的位置if(

all[i+1]

=='hx'):

flag=

0 right=

1else

: flag=

0 i=i+

1while i <

len(

all)

: name =

all[i]

if(name[0]

!=':'

and name[0]

!='1'

and name[0]

!='2'

and name[0]

!='0'):

# 把所有非人情況排除,就能保證判斷的是人

if(right)

: point =

all[i -1]

# 對於hx隊員在右邊的情況,上乙個就是他的比分了,非hx成員的上乙個會是id

if(point[-1

]=='2')

:# 是2就代表贏了

elif

(point[-1

]=='0'or point[-1

]=='1')

:else:if

(i ==

len(

all)-1

):break

point =

all[i +1]

# 對於hx隊員在左邊的情況,下乙個就是他的比分了,非hx成員的下乙個會是對面的id

if(point[0]

=='2'):

# 是2就代表贏了

elif

(point[0]

=='0'

or point[0]

=='1'):

i = i +

1print

("finish"

)# 完成一次,輸出

print

(len

(win)

)print

(len

(lose)

)wins=

for key in win:

wins[key]

=wins.get(key,0)

+1loses=

for key in lose:

loses[key]

=loses.get(key,0)

+1print

("下面是合併的"

)winwin = pd.series(wins)

loselose= pd.series(loses)

states_df = pd.dataframe(

)states_df=states_df.fillna(value=0)

#用0填補空值

print

(states_df)

states_df.to_csv(

'勝率統計.csv'

, sep=

',', header=

true

, index=

true

, encoding=

"utf_8_sig"

)

後面統計的部分寫得有些粗糙,就不詳細說了。後續可能還會優化。如果有大佬能針對這部分給點意見就更好了。

附吐槽:本來隊裡戰報都是發在qq群空間的,爬的是動態頁面的資料。但後來群空間關了,被迫無奈只能爬論壇的靜態頁面2333。

手寫爬取靜態頁面汽車之家

scrapy寫多了,手寫爬蟲有點生疏,今天來回顧手寫爬取靜態頁面,以便日後做筆記用,我今天爬取的是汽車之家網頁,第一步 匯入requests和bs4 import requests from bs4 import beautifulsoup 第三步 解析頁面,在這裡我們用的beautifulsoup...

關於python 爬取 ajax頁面

安裝只要按部就班的點next就好 conda的環境管理功能允許我們同時安裝若干不同版本的python,並能自由切換。對於上述安裝過程,假設我們採用的是python 2.7對應的安裝包,那麼python 2.7就是預設的環境 預設名字是root,注意這個root不是超級管理員的意思 假設我們需要安裝p...

python爬蟲 爬取靜態網頁

爬蟲新手剛入門,萌新練手交流作 import requests import bs4 from bs4 import beautifulsoup 偽裝瀏覽器,獲取源 def gethtml url headers 偽裝瀏覽器 response requests.get url,headers hea...