靜態頁面的爬取十分簡單,直接瀏覽器在頁面上右鍵,選擇「檢視源**」,然後利用相關的庫和正規表示式就能把想要的內容直接爬取。
下面展示個我拿來解決問題的例項。
遊戲王線上戰隊聯盟有很多戰隊,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...