這是一篇關(guān)于iaaf國(guó)際運(yùn)動(dòng)員跳遠(yuǎn)數(shù)據(jù)表格的爬蟲(chóng)經(jīng)驗(yàn) 。(今天我們只取progression項(xiàng)的long=jump的數(shù)據(jù))
我個(gè)人是分了四個(gè)腳本進(jìn)行運(yùn)行:
首先第一個(gè)腳本。1:我們需要導(dǎo)入三個(gè)python的第三方庫(kù),分別是requests(?用于簡(jiǎn)潔且簡(jiǎn)單的處理HTTP請(qǐng)求的第三方庫(kù)),beautifulsoup4(?從HTML和XML文件中解析出數(shù)據(jù)的第三方庫(kù)),import json(JSON 是輕量級(jí)的文本數(shù)據(jù)交換格式。是用來(lái)存儲(chǔ)和交換文本信息的語(yǔ)法。)
這里我加了一個(gè):from future import print_function(表示不同python版本運(yùn)行時(shí)不會(huì)出現(xiàn)問(wèn)題)
2:這里我們還需要取一個(gè)‘User_Agent’:方法:打開(kāi)主界面檢查元素,在控制臺(tái)最下方輸入“alert(navigator.user.Agent)”這時(shí)會(huì)彈出一個(gè)小窗口,復(fù)制即可。(作用:用于洋裝成瀏覽器而不是爬蟲(chóng))
('User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15', })
3:url = 'https://www.iaaf.org/records/toplists/jumps/long-jump/outdoor/men/senior/2018?regionType=world&windReading=regular&page={}&bestResultsOnly=true'
這時(shí)我們可以利用requests,BeautiflSoup來(lái)進(jìn)行處理。
db = pymongo.MongoClient().iaaf(調(diào)用數(shù)據(jù)庫(kù))
4:res = requests.get(url.format(i), headers=headers)(請(qǐng)求得到數(shù)據(jù)并勤變量名為res)
5:record_table = soup.findall('table', class='records-table')(定位目標(biāo)) for i in tr_l: # 針對(duì)每一個(gè)tr 也就是一行
td_l = i.find_all('td') # td的列表 第三項(xiàng)是 帶href
(把td_l里面的每一項(xiàng)賦值 ,組成json數(shù)據(jù) {} 插入到mongo(在從mongo里去到herf訪問(wèn)生涯數(shù)據(jù)并存回這個(gè)表)
6: j_data = {}(將數(shù)據(jù)存到字典里如下:)
try:
j_data['Rank'] = td_l[0].get_text().strip()
j_data['Mark'] = td_l[1].get_text().strip()
j_data['WIND'] = td_l[2].get_text().strip()
j_data['Competitior'] = td_l[3].get_text().strip()
j_data['DOB'] = td_l[4].get_text().strip()
j_data['Nat'] = td_l[5].get_text().strip()
j_data['Pos'] = td_l[6].get_text().strip()
j_data['Venue'] = td_l[8].get_text().strip()
j_data['Date'] = td_l[9].get_text().strip()
j_data['href'] = td_l[3].find('a')['href']
except:
pass
db.athletes.×××ert_one(j_data)
if __name__ == '__main__':
spider_iaaf()(數(shù)據(jù)庫(kù))
下面是第二個(gè)腳本:
from future import print_function
import requests
from bs4 import BeautifulSoup(同樣引用)
1:headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15'}
2: res = requests.get(url, headers=headers)
html = res.text
3: soup = bs(html,'html.parser')(處理文件)
div = soup.find('div', id='progression')(定位到準(zhǔn)確文件)
4:此時(shí)如果我們想準(zhǔn)確的定位到跳遠(yuǎn)成績(jī)我?了一句if語(yǔ)句(if "Long Jump" in text and "View Graph" in text:
tbody = i.parent.parent.table.tbody)表明再此界面有Long Jump和View Graph的就是我們所需要的數(shù)據(jù)并且返回到上兩級(jí)取到tbody標(biāo)簽。
tbody_l.append(tbody) #并且追加到tbody。 # 拿到兩個(gè)元素的tbody 一個(gè)為室外 一個(gè)室內(nèi) 用try except,這時(shí)我們將兩個(gè)數(shù)據(jù)存到字典里。最后 return indoor outdoor。
if name == 'main':
long_jump(url=)
接下來(lái)是第三個(gè)腳本:
from __future__ import print_function
import pymongo(PyMongo是驅(qū)動(dòng)程序,使python程序能夠使用Mongodb數(shù)據(jù)庫(kù),使用python編寫(xiě)而成.)
import requests
from bs4 import BeautifulSoup
import json(JSON 是輕量級(jí)的文本數(shù)據(jù)交換格式。是用來(lái)存儲(chǔ)和交換文本信息的語(yǔ)法。))
from long_jump (腳本名)import *(引用第二個(gè)腳本)
1:db = pymongo.MongoClient().iaaf()
2:headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15’}(同上理)
3:def get_href():
href_list = db.athletes.find()
Count = 1(負(fù)責(zé)去mongo中取href 然后訪問(wèn)得到的數(shù)據(jù)存到原來(lái)的表中)
4: for i in href_list:( 取id 根據(jù)id把爬來(lái)的生涯數(shù)據(jù)插回去)
print(count)
5: db.athletes.update({'_id':i.get('_id')},{"$set"{"outdoor":outdoor,"indoor":indoor}})
count += 1(獲得具體數(shù)據(jù))
6:if name == 'main':
get_href()
第四個(gè)腳本:
from __future__ import print_function
import xlwt(Python語(yǔ)言中,寫(xiě)入Excel文件的擴(kuò)展工具。
相應(yīng)的有xlrd擴(kuò)展包,專門(mén)用于excel讀取。)
import pymongo
1:def write_into_xls(cursor):
title =
['Rank','Mark','age','Competitior','DOB','Nat','country','Venue','Date','out_year','out_performance','out_wind','out_place','out_date','in_year','in_performance','in_place','in_date']
book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('iaaf',cell_overwrite_ok=True)
2:
flag = 1
db = pymongo.MongoClient().iaaf
for i in country_l:
cursor = db.athletes.find({'Nat':i})
for i in cursor:
print(i)
count_out = len(i['outdoor'])
count_in = len(i['indoor'])
count = 1
if count_out >= count_in:
count = count_out
else:
count = count_in
if count == 0:
count = 1(count 為這條數(shù)據(jù)占的行數(shù))
3: flag = flag + count
book.save(r'iaaf.xls')(開(kāi)始從第一行輸入數(shù)據(jù)并且從數(shù)據(jù)庫(kù)?。?/code>
if name == 'main':
write_into_xls(cursor=None)(生成文件iaaf.xls這時(shí)便可用Ecxel查看數(shù)據(jù))
***順便記錄一下查看如何查看數(shù)據(jù)庫(kù)的內(nèi)容兩種方法:
1: ./mongo show dbs
數(shù)據(jù)庫(kù) : iaaf
use iaaf
show tables ---- athletes
db.athletes.find()
2: pymongo db = pymongo.MongoClient().iaaf
for i in db.athletes.find():
print i
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站欄目:爬蟲(chóng)數(shù)據(jù)表格-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.rwnh.cn/article12/dghjdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、Google、面包屑導(dǎo)航、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容