初学者——Selenium爬取统计局年度人口分布公开数据代码
(仅爬虫练习,侵删)
数据来源:统计局官网
数据去向:EXCEL表格
数据处理工具:SELENIUM ,GOOGLE浏览器
注意事项:
1.代码中的浏览器驱动地址以及存储CSV地址需要更换本地地址;
2.存储数据:一张表 = 一个工作薄,目录层级关系在工作薄名字上进行展示;
话不多说,直接上代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
from lxml import etree
from lxml import html
from bs4 import BeautifulSoup
import selenium.webdriver.support.ui as ui
import requests
import pandas as pd
import time
import json
import openpyxl as op
import urllib.request
import re
import hashlib
import datetime
#写入指定的EXCEL文件
def write_to_excel(fileName,sheetname,title,data):
try:
workbook = op.load_workbook(fileName)
worksheet1 = workbook.create_sheet(sheetname)
worksheet1.append( title)
for j in range(len(data)):
insertData = data[j]
worksheet1.append(insertData)
workbook.save(fileName) # 关闭表
except Exception as e:
print('list index out of range')
print(e)
# 获取指定路径下的级数个数
def getElementCnt(resp,path,element):
param1 = resp.xpath(path)
try:
param_code = html.tostring(param1[0])
param_cnt = str(param_code).count(element)
return param_cnt
except Exception as e:
# print("Calculating Element Count Wrong!")
if e is 'list index out of range':
return 0
else:
# print(e)
return 0
#判断下一级个数是否存在
def judgeHasNextFloor(resp,path,element):
a = getElementCnt(resp,path,element)
if a is not 0:
return true
else:
return false
#清除数据自身带来的符号
def cleanString(str1):
return str1.replace('[','').replace(']','').replace('\'''','')
# #获取数据列级信息
def getHeadData(resp):
headlists = []
column_cnt = getElementCnt(resp,'/html/body/div[5]/div[2]/div/div[2]/div[2]/div[2]/div/div[1]/table/thead/tr','<th')
tbhead_list =