python

记一次奇怪的爬虫经历

前言 由于某些原因,我需要去爬获取一些国家旅游景点的信息。 找到国家旅游局的网站,然后找到一个 5A 风景区目录。 网址:http://www.cnta.gov.cn:8000/Forms/TravelCatalog/TravelCatalogList.aspx?catalogType=view&resultType=5A 于是去 pyspider 的 demo 页新建一个项目:5stat,就去爬了。 分析页面 网页比较特殊,看起来是用 dotnet 写的,翻页是按钮调用 js 代码实现的。跳转后还是同一个网址。 这里就要用到 pyspider 支持的页面载入后运行 js 脚本的功能。 先分析翻页按钮干了什么。 如下图,调用一个名为 __doPostBack 的函数。 在页面上寻找这个函数,看到函数体如下: var theForm = document.forms['form1']…

Read more

python × Qt应用开发系列目录(连载中)

python × Qt应用开发 · 0 -- 序 python × Qt应用开发 · 1 -- 基本界面 python × Qt应用开发 · 2 -- 界面初步设计 python × Qt应用开发 · 2.5 -- 改进软件界面 python × Qt应用开发 · 3 -- MVC中model的基本实现 python × Qt应用开发 · 4 -- 数据库设计 python × Qt应用开发 · 5 -- 数据库helper类的编写…

Read more

radioit计划——动画广播辅助脚本radioitScript

在这篇文章的实践基础和这篇文章的代码基础上,我重新将代码整理一下,并添加了一些功能,将原来三个脚本的共同点提炼,写成一个网络广播查看和获取的框架。继而在这个框架上,写出对应三个广播站的脚本的ver 2.0。 原来的脚本的功能就不再详述了,来说说一下新版脚本三大功能,分别是:探索广播、下载广播和查看广播。 探索广播是指能够列出某一个广播站上所有的/当天的/星期x的/最新的广播,旨在能够帮助使用者发现自己喜欢的广播和新推出的广播。 下载广播是指能提取出广播音频/图片的地址,供第三方播放器播放或保存。 查看广播是指能够列出某广播的主要信息:包括更新日期、最新一期的内容、主持人等。 基本可以说,有了新版的脚本,基本就不需要用浏览器浏览广播站的网页了。并且,因为脚本只是需要抓单个页面和将网页内容整理好再输出,所以对比起网页,能更快更高效地呈现有用的信息。 子命令 对比旧版,新版脚本的一大改进是引入了…

Read more

python × Qt应用开发 · 2.5 -- 改进软件界面

上一篇文章完成基本的界面,但是应用看起来并不算特别好看。 主要是因为软件的界面使用默认的样式和普通的窗口框架。接下来从这两个方面出发,尝试改进软件界面。 自定义样式 Qt 给控件的样式化提供了一定的自由度,包括背景色、边框和特定控件的自定义,使用类似CSS的语法。这要求编写软件的人了解基础的CSS语法。各种控件和详细例子:点这里 要改变一个控件的样式,可以在属性编辑器中找到styleSheet属性,将CSS代码写进去。 这里以中间栏的输入框作为例子。 选择输入框,在属性编辑器中找到styleSheet,输入以下CSS代码。 QLineEdit{ border-radius: 10px; padding: 5px 10px; margin: 0 10%; background-color: white; border: 1px solid #c9c9c9; color…

Read more

python × Qt应用开发 · 5 -- 数据库helper类的编写

在上一篇博文中已经生成了数据库,而代码中的视图和模型也准备好了,但是怎么将两者联系起来呢?显然我们需要在其中做做文章,找一个“中间人”去读取数据库的数据并且转化为适合模型的数据。通常称这个“中间人”为数据库helper类。 什么是helper类 顾名思义就是类似助手的一个类,数据库的helper类就是一个帮助程序员方便调用数据库的类。此类可以做的事情通常都是包括连接数据库,执行SQL,转换数据类型等。 操作Python自带的sqlite3库 可以自己纯手写python代码来全程管理数据库,需要操心的地方有点多。 databaseHelper 在app包下新建一个store包,新建一个databaseHelper.py文件。 为帮助代码的理解,极其推荐先去阅读Introduction to SQLite in Python和Advanced SQLite Usage in Python,SQ…

Read more

CoolShell puzzle game 攻略

coolshell出了个游戏,网址点这里,奉上攻略。 第0关 brainfuck语言,很久以前就觉得有意思。 自己看就算了,直接网上执行一次。点这个或这个或这个都可以。 得出是welcome.html。 第1关 2, 3, 6, 18, 108, ? 2×3=6,3×6=18,6×18=108,18×108=1944 输入1944.html知道x=1944。 “生命、宇宙以及任何事情的终极答案”,42。输入42.html知道y=42。 1944×42=81648 得81648.html。 第2关 那个键盘排布是dvorak方案,不同于我们平常的QWERT键盘方案。 直接上网找转换,那串字符转过来就是 main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);} 看起来就是C++语言。继续在线编译运行。运行出…

Read more

python中有趣的zip函数

懂python的都知道有一个内置函数zip,作用是将多个序列里面的对应组合起来。 直接上图。 图中a1、a2、result都是序列。zip在执行的时候将序列a1中的一个元素取出,再取出序列a2对应位置中的元素,组合成一个tuple,最后将这些tuple组合成一个数组。 所以,最后我们得到一个数组result=[(1,a),(2,b),(3,c),...] 所以这个zip的意思理解成拉链比较形象。 两个序列是两边的链,zip函数将它们拉上组合起来。 当然zip函数可接收多个序列。 然后很有趣的事情就来了,如果在这之后再执行zip(*result),就可以取回序列a1和序列a2! 代码上看更直观。 >>> a1 = [1, 2, 3] >>> a2 = ['a', 'b', 'c'] >>> result = zip(a, b) >&…

Read more

为上一篇分析如何保存网络广播的博文追加一个脚本

在上一篇博文中,只是给出了提取“響”上的广播的mms协议地址的脚本,这些地址使用某雷来下载就可以了。但是其中有一节提到音泉上的广播是可以直接提取到mp3的地址的,这就意味着可以直接使用http协议来下载。 于是我今天下午写了一个辅助的python脚本出来,方便自己用。 直接上代码: #!/usr/bin/env python # _*_ coding: utf-8 _*_ from bs4 import BeautifulSoup import argparse import urllib2 import sys import json def download_audio(name, proxy): print("collecting information...") try: respose = urllib2.urlopen(u"htt…

Read more

如何保存一些网络广播

近来一直有在网上听一些动画的广播以及网络广播。而因为广播每周都有放送,如果错过了这周,下一周就没得再听了(有些可以付费重新听,相当于不可能再听了)。那么本周的广播其实可以先保存下来,等到有时间的时候再听。经过了一段时间的摸索,的确摸到了一些门路,于是总结一下整个流程的技术。这些广播实质上就是一些网络媒体,和平常在音乐网站听音乐等其实是一样的,因此这些获取方法应该也基本适用。 边用边分析——響篇 提取媒体位置——響篇 使用特定的工具 另一个例子——音泉篇 使用插件或工具下载 编写脚本 福利 边用边分析——響篇 下面以我经常去的響 - HiBiKi Radio Station -为例子。 打开网站。 大概浏览一下整个页面,可以看到分成几个区域,新闻区、播放器区、节目列表区、广告区。 新闻区会更新广播的信息,一般是得知新广播推出的来源。 播放器区,这个是重点。一般看…

Read more

python × Qt应用开发 · 4 -- 数据库设计

在上一篇探讨MVC模式使用的博文中,已经成功实现了Tree Viewwidget的数据显示。而实际上,其中的数据是我们自己硬编码的,显然不符合要求。节点中的_data域也只是简单的字符串,没有体现出MVC的优势。对于本应用中要求的比较有结构化的数据,很自然地考虑使用数据库来组织。 数据库的考虑 作为本地应用,考虑使用python自带的嵌入式数据库sqlite3。SQLite跟普通数据库管理如MYSQL等大同小异,SQL语句也是相差不大,一般有学习过数据库的读者找找资料大概就能轻松理解,而没有使用过数据库或者不懂数据库的读者则应该先补充好数据库的知识再来阅读本文。 在python,只需要加上import sqlite3语句就能使用SQLite,方便至极。 笔记本 笔记本的数据结构是一棵棵树,叶子节点是章节。考虑使用一个名为notebook的表来保存笔记本数据,一个名为chapter的表来保存…

Read more