99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2022-03-05 閱讀量: 1154
詳解Python如何將爬取到的數(shù)據(jù)分別存儲到txt、excel、mysql中!

1. 頁面分析

我爬取的頁面是騰訊體育,鏈接如下:
https://nba.stats.qq.com/player/list.htm
圖片
觀察上圖:左邊展示的分別是NBA的30支球隊(duì),右邊就是每只球隊(duì)對應(yīng)球員的詳細(xì)信息。
此時思路就很清晰了,我們每點(diǎn)擊一支球員,右側(cè)就會出現(xiàn)該球隊(duì)的球員信息。
整個爬蟲思路簡化如下:

  • ① 獲取每支球員頁面的url;
  • ② 利用Python代碼獲取每個網(wǎng)頁中的數(shù)據(jù);
  • ③ 將獲取到的數(shù)據(jù),存儲至不同的數(shù)據(jù)庫;

那么,現(xiàn)在要做的就是找到每支球員頁面的url,去發(fā)現(xiàn)它們的關(guān)聯(lián)。
我們每點(diǎn)擊一支球隊(duì),復(fù)制它的url,下面我復(fù)制了三支球隊(duì)的頁面url,如下所示:

# 76人
https://nba.stats.qq.com/player/list.htm#teamId=20

# 火箭
https://nba.stats.qq.com/player/list.htm#teamId=10

# 熱火
https://nba.stats.qq.com/player/list.htm#teamId=14

觀察上述url,可以發(fā)現(xiàn):url基本一模一樣,除了參數(shù)teamId對應(yīng)的數(shù)字不一樣,完全可以猜測出,這就是每支球隊(duì)對應(yīng)的編號,30支球隊(duì)30個編號。
只要是涉及到“騰訊”二字,基本都是動態(tài)網(wǎng)頁,我之前碰到過好多次。基礎(chǔ)方法根本獲取不到數(shù)據(jù),不信可以查看網(wǎng)頁源碼試試:點(diǎn)擊鼠標(biāo)右鍵——>點(diǎn)擊查看網(wǎng)頁源代碼。
圖片部分截圖如下
接著,將網(wǎng)頁中的某個數(shù)據(jù)(你要獲取的)復(fù)制,然后再源代碼頁面中,點(diǎn)擊crtl + f,調(diào)出“搜索框”,將復(fù)制的數(shù)據(jù)粘貼進(jìn)去。如果和上圖一樣,出現(xiàn)0條記錄,則基本可以判斷該網(wǎng)頁屬于動態(tài)網(wǎng)頁,直接獲取源碼,一定找不到你要的數(shù)據(jù)。
因此如果你想要獲取頁面中的數(shù)據(jù),使用selenuim自動化爬蟲,是其中一種辦法。

2. 數(shù)據(jù)爬取

關(guān)于selenium的的使用配置,我在一篇文章中詳細(xì)講述過,點(diǎn)擊下方超鏈接查看:
《手把手教你爬取淘寶的筆記本電腦數(shù)據(jù)》
我喜歡用xpath,對于本文數(shù)據(jù)的獲取,我都將使用它。關(guān)于xpath的使用,那就是另一篇文章了,這里就不詳細(xì)講述。
圖片
說了這么多,咋們直接上代碼吧!

from selenium import webdriver

# 創(chuàng)建瀏覽器對象,該操作會自動幫我們打開Google瀏覽器窗口
browser = webdriver.Chrome()

# 調(diào)用瀏覽器對象,向服務(wù)器發(fā)送請求。該操作會打開Google瀏覽器,并跳轉(zhuǎn)到“百度”首頁
browser.get("https://nba.stats.qq.com/player/list.htm#teamId=20")

# 最大化窗口
browser.maximize_window()

# 獲取球員中文名
chinese_names = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[2]/a')
chinese_names_list = [i.text for i in chinese_names]

# 獲取球員英文名
english_names = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[3]/a')
english_names_list = [i.get_attribute('title') for i in english_names] # 獲取屬性

# 獲取球員號碼
numbers = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[4]')
numbers_list = [i.text for i in numbers]

# 獲取球員位置
locations = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[5]')
locations_list = [i.text for i in locations]

# 獲取球員身高
heights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[6]')
heights_list = [i.text for i in heights]

# 獲取球員體重
weights = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[7]')
weights_list = [i.text for i in weights]

# 獲取球員年齡
ages = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[8]')
ages_list = [i.text for i in ages_list]

# 獲取球員球齡
qiu_lings = browser.find_elements_by_xpath('//div[@class="players"]//tr[@class="show"]/td[9]')
qiu_lings_list = [i.text for i in qiu_lings_list]

這里只爬取了一支球隊(duì),剩下29支球隊(duì)球員數(shù)據(jù)的爬取任務(wù)交給你們。整個代碼部分,基本上大同小異,我寫了一個,你們照葫蘆畫瓢。【就一個循環(huán),還不簡單呀!】

3. 存儲至txt

將數(shù)據(jù)保存到txt文本的操作非常簡單,txt幾乎兼容所有平臺,唯一的缺點(diǎn)就是不方便檢索。要是對檢索和數(shù)據(jù)結(jié)構(gòu)要求不高,追求方便第一的話,請采用txt文本存儲。
注意:txt中寫入的是str字符串。
txt文檔寫入數(shù)據(jù)的規(guī)則是這樣的:從頭開始,從左至右一直填充。當(dāng)填充至最右邊后,會被擠到下一行。因此,如果你想存入的數(shù)據(jù)規(guī)整一點(diǎn),可以自動填入制表符“\t”和換行符“\n”。
以本文為例,將獲取到的數(shù)據(jù),存儲到txt文本中。

for i in zip(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list):
with open("NBA.txt","a+",encoding="utf-8") as f:
# zip函數(shù),得到的是一個元組,我們需要將它轉(zhuǎn)換為一個字符串
f.write(str(i)[1:-1])
# 自動換行,好寫入第2行數(shù)據(jù)
f.write("\n")
f.write("\n")

部分截圖如下:
圖片

4. 存儲至excel

excel有兩種格式的文件,一種是csv格式,一種是xlsx格式。將數(shù)據(jù)保存至excel,當(dāng)然是使用pandas庫更方便。

import pandas as pd

# 一定要學(xué)會組織數(shù)據(jù)
df = pd.DataFrame({"中文名": chinese_names_list,
"英文名": english_names_list,
"球員號碼": numbers_list,
"位置": locations_list,
"身高": heights_list,
"體重": weights_list,
"年齡": ages_list,
"球齡": qiu_lings_list})

# to_excel()函數(shù)
df.to_excel("NBA.xlsx",encoding="utf-8",index=None)

結(jié)果如下:
圖片

5. 存儲至mysql

MySQL是一個關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)是采用類excel的二維表來保存數(shù)據(jù)的,即行、列組成的表,每一行代表一條記錄,每一列代表一個字段。
關(guān)于Python操作MySQL數(shù)據(jù)庫,我曾經(jīng)寫了一篇博客,大家可以參考以下:
blog.csdn.net/weixin_41261833/article/details/103832017
為了讓大家更明白這個過程,我分布為大家講解:

① 創(chuàng)建一個表nba

我們想要往數(shù)據(jù)庫中插入數(shù)據(jù),首先需要建立一張表,這里命名為nba。

import pymysql

# 1. 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='demo', charset='utf8')

# 2. 創(chuàng)建一個表
# 創(chuàng)建一個游標(biāo)對象;
cursor = db.cursor()

# 建表語句;
sql = """
create table NBA(
chinese_names_list varchar(20),
english_names_list varchar(20),
numbers_list varchar(20),
locations_list varchar(20),
heights_list varchar(20),
weights_list varchar(20),
ages_list varchar(20),
qiu_lings_list varchar(20)
)charset=utf8
"""

# 執(zhí)行sql語句;
cursor.execute(sql)

# 斷開數(shù)據(jù)庫的連接;
db.close()
② 往表nba中插入數(shù)據(jù)
import pymysql

# 1. 組織數(shù)據(jù)
data_list = []
for i in zip(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list):
data_list.append(i)

# 2. 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='demo', charset='utf8')

# 創(chuàng)建一個游標(biāo)對象;
cursor = db.cursor()

# 3. 插入數(shù)據(jù)
sql = 'insert into nba(chinese_names_list,english_names_list,numbers_list,locations_list,heights_list,weights_list,ages_list,qiu_lings_list) values(%s,%s,%s,%s,%s,%s,%s,%s)'

try:
cursor.executemany(sql,data_list)
db.commit()
print("插入成功")
except:
print("插入失敗")
db.rollback()
db.close()

結(jié)果如下:
圖片


310.9617
0
關(guān)注作者
收藏
評論(0)

發(fā)表評論

暫無數(shù)據(jù)
推薦帖子