在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示: 当这个插件处于关闭状态时,待爬取的页面显示的数据如下: 当这个插件处于打开状态时,待爬取的页面显示的数据如下:   可以看到,页面上很多数据都不显示了,比如商品价格变成了划线价格,而且累计评论也变成了0,说明这些数据都是动态加载的,以下演示真实价格的找法(评论内容找法类似),首先检查页面元素,然后点击Network选项卡,刷新页面,可以看到很多动态加载的数据,在里面找到包含商品价格的链接(可以使用Ctrl+f查找),如下图所示:   将此链接在新的标签页打开,如下图所示,可以看到,被禁止访问了,所以爬取的时候要在headers中加上Referer字段告诉服务器你是从哪个页面链接过来的,Referer字段可以在这里查看: 评论数据的链接可以直接访问(和价格信息找法类似),这里我知己去访问它,如下图所示:   可以看到评论信息总共有7页,而且都是json格式的数据,所以可以用js 继续阅读 >>


何攀 18/01/06 23:14:32
本文分析一下Reactor模式的实现,关键是三个类:Channel、Poller、EventLoop。 事件分发类 Channel Channel 是 selectable IO channel,负责注册与响应IO事件,包括注册给Poller的 fd 及其监听的事件,以及事件发生了所调的回调函数。 每个Channel对象自始至终只负责一个 fd 的事件分发,封装了一系列该 fd 对应的操作,使用了回调函数,包括可读、可写、关闭和错误处理四个。 首先给定Channel所属的 loop,及其要处理的 fd;接着注册 fd 上需要监听的事件,如果是常用的读写事件的话,可以直接调用接口函数enableReading或enableWriting来注册对应fd上的事件,disable*是销毁指定的事件;然后通过 set*Callback 来设置事件发生时的回调。 注册事件时函数调用关系,如下:Channel::update()->EventLoop::updateChannel(Channel*)->Poller::updateChannel(Channel*),最终向 继续阅读 >>


杜肖孟 18/01/06 18:36:02
前言 今天给1702班的娃们答疑,遇到了一个问题,当时很蒙,后来想了想就是之前的一个问题,当时解决了却忘了总结了,今天赶紧总结下。 正文 源程序是这样的(就作为我们的实验1) char a = '\0x41'; printf("%x",a); 结果是个31,emmmm 看上去结果很有迷惑性,恩 其实我们只要在ASCII表里找一下0x31对应的值就好啦,是’1’。 那么我们再改成’\0x51’,’\0x61’,’\0x71’试试。 结果是一样的。 让我们再做个实验验证我们的结论: char a = '123'; putchar(a); 这时直接打印3。 需要注意的是,上面的两个实验都会报warning,而且都是相同的 1.c:10:11: 警告:多字节字符常量 [-Wmultichar] char a = '\0x41'; ^~~~~~ 1.c:10:11: 警告:隐式常量转换溢出 [-Woverflow] 那么这和哪个警告有关系呢? 第三个实验: char a = '\0x'; print 继续阅读 >>


康艺杰 18/01/06 15:08:08
前言 最近微信的跳一跳很火,大家看到排行榜上几百上千的分数,再看看自己百分左右的分数肯定很难过,我手残怪我吗?没关系,如果你跟着我来,也能让你分数霸榜。 原理 首先大家是有一个直观感受,根据两个箱子距离的不同,需要按压的时间也是不一样的,一般来说,一个大胆的猜测是按压时间和距离是成正比的。 这是我们的工作原理: 在跳一跳页面截图 计算出初始点和终点的距离 想办法测出距离与按压时间的系数 想办法让手机按压指定的时间 重复1-4 工具 adb调试工具,它可以辅助截图以及上传截图给电脑,以及控制手机按压位置及时间 python 处理数据 python Pillow库 一个图像库,可以获取图像信息 python matplotlib库 配合Pillow打开图像并记录鼠标点击地方的坐标 准备工作 环境 fedora 27 python3.6 安装 adb调试工具 fedora/centos sudo yum install adb ubuntu sudo apt install adb python需要的库 sudo pip3 i 继续阅读 >>


李余通 18/01/04 20:54:33
C. Phone Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya has several phone books, in which he recorded the telephone numbers of his friends. Each of his friends can have one or several phone numbers. Vasya decided to organize information about the phone numbers of friends. You will be given n strings — all entries from Vasya's phone books. Each entry starts with a friend's name. Then follow 继续阅读 >>


殷健翔 18/01/03 15:28:53
模式与数据库、数据库中的表的关系: 1个数据库下,可以有多个模式。 1个模式下,可以有0个或多个表 。   首先我来做一个比喻,什么是User,什么是Database,什么是Schema,什么是Table,什么是列,什么是行,?   我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table就被放入每个房间中,不能放置在房间之外。然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样。所以Schema包含的是Object,而不是User。   User是每个对应数据库的主人,既然有操作数据库的权利,就肯定有操作数据库中每个Schema(房间)的权利。换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的,他有完全的操作权,。我们还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Ro 继续阅读 >>


李东林 18/01/02 20:55:18
以前学习python都是马马虎虎,导致很多特性只是知道完全不会用,现在将他们重新学习 可迭代对象(Iterable) 简单来说,所有可以放入for循环中的对象都是可迭代对象,如列表,元组,字符串,字典… 如何判断对象是否是可迭代对象? 实际上,只要实现了__iter__方法的对象就是可迭代对象,这个方法用来返回迭代器本身(特别重要)。 eg: >>> s = "dasda" >>> s.__iter__() <str_iterator object at 0x7f23ebc44470> python提供了方法判断是否是可迭代对象。 >>> from collections import Iterable >>> isinstance(s,Iterable) True 迭代器(Iterator) 似乎和上面的概念很相似。实际上,所有实现了__next__()方法的对象都是迭代器。一般来说,也都可以放入for循环。 python中原生的迭代器不多,可 继续阅读 >>


李余通 18/01/02 19:16:42
Trailing Zeroes (III) LightOJ - 1138 You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. For example, 5! = 120, 120 contains one zero on the trail.大体题意:N!后面有Q个0,给你Q,求NInputInput starts with an integer T (≤ 10000), denoting the number of test cases.Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.OutputFor each case, print the case number and&n 继续阅读 >>


殷健翔 18/01/02 14:23:23
前言 这几天做课设,Linux下的Huffman编码译码器,在命令行输入文件时希望能够实现自动补全,避免错误的同时使输入更加的便捷,于是便想到了暑假时的readline()函数,readline()函数确实很赞,可以与当前的Bash命令行进行交互 Readline库的安装 在Ubuntu下命令行安装 sudo apt-get install libreadline6-dev 这样Readline库就安装完成 Readline库的动态链接 然后进行一下小测试 #include<iostream> #include<readline/readline.h> using namespace std; int main() { char a[] = "please input a string\n"; char *input = readline(a); printf("%s\n",input); return 0; } 后来才知道Readline是一个动态链接库,对动态库链接需要找到它的位置 继续阅读 >>


殷健翔 18/01/02 14:05:06
前言 大二感觉真的特别水,第一次感觉到自己啥都不会,同时啥也不愿意学,整个人和一个废人差不多,博客也没怎么更新(说到底还是太懒,下面得替自己找个借口)这次的训练题实际算是半个月之前就已经做完,上个星期排出成绩,最近又是信号报告,数学建模上机报告,数据结构课程设计报告,搞得天天特别狼狈,而且这次的题的算法最终并没有实现,感觉能力还是欠缺了很多吧。 至于博客也不是神马论文,很多地方也不用那么文绉绉的吧,当然格式也不可能那么的规范。 问题重述 UNO的wiki “UNO是一种趣味性比较强的游戏,它基于颜色和数字不断的轮流出牌,并含有各种功能牌(大部分带有惩罚的性质),最终出完或者剩余牌计分最低的赢得比赛。 牌的类型 普通牌 有红,黄,蓝,绿四种颜色,每种颜色都有 0号牌1张 1-9号牌两张 共计76张 功能牌 有红,黄,蓝,绿四种颜色,每种颜色都有 阻挡牌(skip)2张 反转牌(reverse)2张 罚两张(draw tow)2张 共计24张 万能牌 可以当作任意颜色的牌打出,分两种: 变色牌(wild)4张 王牌(wild f 继续阅读 >>


殷健翔 18/01/02 08:39:46