关于多页面selenium爬取存储

目标网站: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版本还没有尝试,等到我找到新的方法在讲

 

posted @ 2019-09-26 23:00  是四不是十  阅读(582)  评论(0编辑  收藏  举报