`
mushme
  • 浏览: 790062 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

选择一个好的驾校,用数据说话,我用python

 
阅读更多
在交管局网站上,看到每月的考试信息都有工具。
想想,可以汇总下,按照考试人数排个名(群众的选择大部分时候都是有道理的)

1.数据先抓取下来
#encoding=utf8
import urllib
import urllib.request
import http.cookiejar
from bs4 import BeautifulSoup
# 导入SQLite驱动:
import sqlite3

User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
header = {}
header['User-Agent'] = User_Agent


vyear='201601'
urlFile = urllib.request.urlopen('https://sn.122.gov.cn/publicitypage?size=20&fzjg=%E9%99%95A&page=1&tjyf='+vyear)
data = urlFile.read()
urlFile.close()
data = data.decode('utf-8',errors='ignore')
print("get page success")
pre = "<div id='pagination'><span  class=''>共"
index1 = data.find(pre) + len(pre)
index2 = data.find('条记录', index1)

ebi=data[index1 : index2];
print("总条数:"+ebi)

totalPage="";
if (int(data[index1 : index2]))%20>0:
    totalPage=str(int(int(data[index1 : index2])/20+1)) 
else:
    totalPage=str(int(int(data[index1 : index2])/20))
print("totalpage:"+totalPage);


def getList(pageId):
    
    hosturl = 'https://sn.122.gov.cn/publicitypage?size=20&fzjg=%E9%99%95A&tjyf='+vyear+'&page='+pageId
    print("getcontent:"+hosturl);

    request = urllib.request.Request(hosturl, None, header)
    response = urllib.request.urlopen(request)
    htmldata = response.read()
    soup = BeautifulSoup(htmldata,"html.parser")
    trs = soup.findAll('tr')
    for x in range(1,len(trs)):
        tr = trs[x]
        tds = tr.findAll("td")
        savejiaxiao(tds[0].contents[0],tds[1].contents[0],tds[2].contents[0],tds[3].contents[0],tds[4].contents[0],tds[5].contents[0]);
        
def savejiaxiao(t_date, t_name,t1,t2,t3,t4):
    conn = sqlite3.connect('jiaxiao.db')
    cursor = conn.cursor()
    # 执行一条SQL语句,创建user表:
    cursor.execute('create table IF NOT EXISTS kaoshi (id INTEGER PRIMARY KEY, t_date varchar(100),t_name varchar(100),t1 varchar(100),t2 varchar(100),t3 varchar(100),t4 varchar(100) )')
    cursor.execute('select * from kaoshi where t_date=\''+t_date+'\' and t_name=\''+t_name+'\'  and t1=\''+t1+'\' and t2=\''+t2+'\' and t3=\''+t3+'\'  and t4=\''+t4+'\' ')
    values=cursor.fetchall()
    if len(values) > 0:#以前就存在
        print('已经存在:'+t_date+','+t_name)
    else:
        try:
            cursor.execute('insert into kaoshi (t_date, t_name,t1,t2,t3,t4) values(?,?,?,?,?,?)',(t_date,t_name,t1,t2,t3,t4)) 
            print("save success."+t_date+','+t_name)
        except Exception  as e:
            print('except:', e)
            
           
# 关闭Cursor:
    cursor.close()
# 提交事务:
    conn.commit()
# 关闭Connection:
    conn.close()        

for x in range(1,int(totalPage)+1): #代表从1到totalPage+1(不包含totalPage)
    errorLink=[]
    try:
        getList(str(x))
    except Exception  as e:
        print('except:', e)
        errorLink.append(x)
print("errorLink:"+str(errorLink));

2.把数据导出到excel里
# -*- coding:utf-8 -*-
import xlwt

# 导入SQLite驱动:
import sqlite3

	
def export():
    conn = sqlite3.connect('jiaxiao2016.db')
    cursor = conn.cursor()
    cursor.execute('select * from kaoshi')
    values = cursor.fetchall()
    i=0
    book=xlwt.Workbook()
    sheet1=book.add_sheet('驾校')
    for line in values:
        row = sheet1.row(i)
        row.write(0,line[0])#id
        row.write(1,line[1])#title
        row.write(2,line[2])#link
        row.write(3,line[3])
        row.write(4,line[4])
        row.write(5,line[5])
        row.write(6,line[6])
        sheet1.col(1).width = 5000
        i=i+1  
    book.save('驾校2016.xls')  
    cursor.close()
    conn.commit()
    conn.close()


export()


3.在excel里做个透视图,按月汇总并排序下,得到结果如下

西安西高驾校科二考场 1870 1241 1158 1095 5364
北所科目一考场 1593 1227 1088 863 4771
郊县分所蓝田县科三考试场 3887 210 343 256 4696
郊县长安科目一考场 2332 1844 15 282 4473
西安支队尚稷路科三考场 2263 764 834 567 4428
西安科目三咸阳吉祥考场 868 928 766 1488 4050
东所科目一考场 2664 300 230 159 3353
西安小型车科目三铜川考场 1424 574 557 588 3143
西安支队户县科目三考场 2107 186 343 338 2974
南所科目一考场 1397 473 511 433 2814
西安天平驾校科二考场 1457 456 890 2803
西安博安驾校科目二考场 842 313 935 417 2507
西安华津驾校科二考场 1494 120 422 291 2327
西所科目一考场 1560 262 193 208 2223
郊县阎良科目一考场 1708 226 1934
西安小型车科目三咸阳西郊考场 5 186 544 783 1518
郊县户县科目一考场 1188 247 21 33 1489
0
1
分享到:
评论
2 楼 mushme 2016-08-11  
jilong-liang 写道

public static void trustEveryone() {  

这个方法的作用是什么?
1 楼 jilong-liang 2016-07-05  
package sm;

import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test {
public static void main(String[] args) throws Exception{

trustEveryone();

for (int i = 1; i <=42; i++) {
String url="https://sn.122.gov.cn/publicitypage?size="+i+"&page=7&tjyf=201601&fzjg=%E9%99%95A&fwdmgl=6003";

Document doc=Jsoup.parse(new URL(url), 3000);

//处理从页面的class=table table-stirped table-hover样式下面的li标签 
            Elements trs=doc.getElementsByAttributeValue("class", "table table-stirped table-hover").select("tr");
            for(Element tr:trs){ 
            String rq = tr.select("td:eq(0)").text();//日期
            String kcmc = tr.select("td:eq(1)").text();//考场名称
            System.out.println(kcmc);
            }
}
}


public static void trustEveryone() {  
        try {   
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {   
                public boolean verify(String hostname, SSLSession session) {   
                    return true;   
                }   
            });   
   
            SSLContext context = SSLContext.getInstance("TLS");   
            context.init(null, new X509TrustManager[] { new X509TrustManager() {   
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {   
                }   
   
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {   
                }   
   
                public X509Certificate[] getAcceptedIssuers() {   
                    return new X509Certificate[0];   
                }   
            } }, new SecureRandom());   
            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
}

相关推荐

    Python驾校考题项目.zip

    《Python驾校考题项目》是一个综合性的学习资源,旨在帮助初学者或有一定基础的Python开发者实践数据处理和项目部署。这个项目包含以下几个关键知识点: 1. **Python编程基础**:项目使用Python作为主要开发语言,...

    python毕业设计基于Django+mysql的驾校综合服务平台系统源码.zip

    python毕业设计、期末大作业基于Django+mysql的驾校综合服务平台系统源码。 软件架构 软件架构说明 安装教程 将项目下载到本地 运行 .sql文件。 运行代码,浏览器查看。 介绍 python毕业设计、期末大作业基于...

    基于Python Django的驾校管理系统设计源码

    本项目是一款基于Python Django框架开发的驾校管理系统源码,共计268个文件,涵盖156个.pyc字节码文件、73个.py源代码文件、16个HTML文件、10个XML文件、3个CSS文件、3个JavaScript文件,以及2个.gitignore和2个IML...

    驾校一点通源码.zip

    "驾校一点通源码.zip" 是一个包含了驾校一点通网站平台源代码的压缩包文件,主要服务于驾驶培训教育领域。源码是构建软件的基础,它揭示了程序内部的工作原理和结构,对于开发者来说,能够深入理解系统的设计思路,...

    基于python的驾照考试在线系统.zip

    总的来说,"基于Python的驾照考试在线系统"是一个涵盖Web开发多个领域的项目,它涵盖了后端开发、前端设计、数据库管理、用户认证、算法设计等多个知识点,对于学生和初学者来说,是一个极好的学习和实践平台。...

    山西驾校python期末课设_Expression-evaluator.zip

    山西驾校python期末课设_Expression-evaluator

    驾校一点通

    1. **FOXUSER.DBF**:这可能是一个FoxPro数据库文件,用于存储用户信息或者学习进度数据。在驾校一点通中,可能记录了用户的答题记录、错题集、学习时间等关键数据,以便提供个性化的学习建议。 2. **vfp9r.dll**:...

    驾校一点通,好东西大家分享

    【驾校一点通】是一款专为驾驶学员...总的来说,"驾校一点通"是一个集学习、练习、模拟考试于一体的驾驶学习工具,通过综合性的学习资源和人性化的功能设计,旨在帮助驾驶学员高效地掌握驾驶知识,顺利通过驾驶考试。

    驾校管理系统需求规格说明书.doc

    驾校管理系统的需求规格说明书的编写目的,是为了明确驾校管理系统的需求,以便开发团队和实施团队能够更好地理解和实施驾校管理系统。文档约定包括文档的结构、术语定义、缩略语和符号等。预期的读者包括驾校管理...

    驾校管理系统源码.zip

    总的来说,驾校管理系统的源码是一个综合性的学习资源,涵盖了软件开发的多个层面,对于想要提升软件开发技能,特别是业务管理系统设计能力的开发者来说,是一个宝贵的实践案例。通过深入研究这套源码,不仅可以了解...

    驾校一点通2013抢先版

    1. **FOXUSER.DBF**:这是一个数据库文件,通常用于存储用户信息或学习进度等数据。在驾校一点通软件中,它可能保存了用户的练习记录、错题集或者个人设置等信息。 2. **vfp9r.dll**:这是Visual FoxPro 9.0的运行...

    驾校计算机综合管理系统介绍.doc

    驾校计算机综合管理系统介绍.doc

    驾校系统全站源码.zip

    【驾校系统全站源码】是一个专为驾驶培训学校设计的完整网站源代码包,它包含了一套完整的、用于管理驾校日常运营的软件系统。这个源码仅供学习用途,不可用于商业项目,使用者应遵守这一规定,尊重知识产权。在源码...

    八一驾校系统 v1.0

    【标题】:“八一驾校系统 v1.0”是一个基于.NET技术开发的驾校管理系统,主要用于学员的网上报名操作。这个系统可能集成了基础的学员信息管理、报名流程控制以及相关数据统计等功能,旨在提高驾校日常运营效率和...

    新版驾校排课应用程序

    数据库文件`wkSVdatabase.mdb`是一个Access数据库,其中存储了驾校的所有关键数据,包括教练车信息、教练资料、学员详情等。数据库的设计对于应用程序的运行至关重要,因为它允许快速查询和更新数据,支持高效的排课...

    海淀驾校约车软件,绝对好使

    【标题】:“海淀驾校约车软件,绝对好使” 该标题揭示了我们正在讨论的是一款专为海淀驾校设计的约车软件。这款软件的核心功能是帮助学员预约驾驶课程,优化了传统的电话预约或现场排队的方式,提升了服务效率和...

    驾校信息管理系统设计与实现.docx

    4. MySQL数据库管理系统:MySQL是一个开放源代码的关系型数据库管理系统,常用于存储和管理大型数据,在驾校信息管理系统设计与实现中,MySQL 8.0作为数据库管理系统,用于存储和管理驾校的各类数据。 5. Eclipse ...

    微信小程序源码+项目说明(为学员提供学车报名、线上模拟考试、预约练车服务及驾校管理及教练管理)(所有数据皆为虚拟数据).zip

    微信小程序源码+项目说明(为学员提供学车报名、线上模拟考试、预约练车服务及驾校管理及教练管理)(所有数据皆为虚拟数据).zip 微信小程序源码+项目说明(为学员提供学车报名、线上模拟考试、预约练车服务及驾校...

    基于Python、JavaScript、CSS、HTML的guodaedu国大驾校官方网站设计源码

    整个项目共包含660个文件,其中JavaScript文件295个,图片文件(jpg和png)合计188个,Python源文件55个,CSS文件47个,HTML文件18个,XML文件12个,GIF和EOT等格式文件共计21个。该官方网站旨在为国大驾校提供全面...

Global site tag (gtag.js) - Google Analytics