目标网站:https://china.nba.com/playerindex/
爬取所有球员的信息:对目标网站进行分析的时候切换网页url不会变化,并且网页内容也不变
使用selenium模拟登录爬取数据:
from selenium import webdriver
from lxml import etree
import pandas as pd
import json
import time
browser=webdriver.Chrome()
try:
browser.get("https://china.nba.com/playerindex/")
wait=WebDriverWait(browser,10)
#分析页面的信息,发现从A到Z字母开头的人名,只是将最后的xpath改为了对应的字母位数,因此我们拼接出相应的xpath对应页面,点击获取信息
for i in range(1,27):
path = '//*[@id="main-container"]/div/div[2]/div[2]/section/div/div/div/div/div[3]/div[2]/div[2]/'+'div['+str(i)+']'
#找到xpath点击
browser.find_element_by_xpath(path).click()
#找到第一个列表,也就是相应的球员信息表
df = pd.read_html(browser.page_source)[0]
#导出为csv文件
df.to_csv('std'+str(i)+'.csv', index=False)
time.sleep(10)
finally:
browser.close()
知识兔因为我还没有找到将每一页的列表都存在一个csv文件的方法,因此我只能用笨方法。生成了26个csv文件,然后将他们存到一个csv文件里面
import pandas as pd
import os
la = []
for i in range(1,27):
path = 'std' + str(i) +'.csv'
la.append(path)
for inputfile in la:
pf = pd.read_csv(inputfile,header = None)
pf.to_csv('all.csv',mode='a',index=False,header=False)
知识兔此处的路径你需要重新的设置,这样生成一个大的csv文件,那么进行导入数据库,当然我不是说的手动导入
xlrd模块支持将lxs表格导入到数据库,因此我想的是将csv文件转换成xls文件
from io import StringIO
import csv
import pandas as pd
c_path = r"C:\Users\23990\Desktop\all.csv"
x_path = r"C:\Users\23990\Desktop\xxx.xls" # 路径中的xls文件在调用to_excel时会自动创建
def csv_to_xls(csv_path, xls_path):
with open(csv_path, 'r', encoding='gb18030', errors='ignore') as f:
data = f.read()
data_file = StringIO(data)
print(data_file)
csv_reader = csv.reader(data_file)
list_csv = []
for row in csv_reader:
list_csv.append(row)
df_csv = pd.DataFrame(list_csv).applymap(str)
'''
这部分是不将csv装换为xls,而是过滤后再写入csv文件
df_csv = df_csv[(df_csv[4] == '') | (df_csv[4] == 'name')] # 过滤出第四列包含空值和name的数据
df_csv.to_csv(csv_path, index=0, header=0, encoding='gb18030') # 写入csv文件中
'''
writer = pd.ExcelWriter(xls_path)
# 写入Excel
df_csv.to_excel(
excel_writer=writer,
index=False,
header=False
)
writer.save()
csv_to_xls(c_path, x_path)
知识兔最后导入数据库,完美,此方法在Windows环境完全正常运行,在Mac版本还没有尝试,等到我找到新的方法在讲