首先我们先来看一下淘宝搜索商品的页面,这里以糖炒板栗为例:   可以看到搜索到了很多糖炒板栗,显示有100页,但真正搜索到的商品超过了100页,给用户只显示前100页,后面编写的爬虫只爬取前50页,url构造这里就不讲了,之前的博客已经讲过了,需要更多可以自己更改页数,然后我们检查网页元素,找到商品链接并复制,然后在网页源代码里查找,结果如下:   发现并没有找到,说明该数据是动态加载的,那我们是不是应该去js动态加载的数据中去找呢?答案是没必要,虽然可以这样找,但是效率很低。这里介绍另一种方法,仔细观察商品详情页的链接,你会发现有一个参数是id,如果搜索结果页的网页源码里有这些商品的id,那我们不就可以直接构造url了,带着这种思路,我们进行如下操作:   我们发现,这种思路是正确的,在网页源代码里确实找到了该商品的id,然后我们进行如下操作: 按照这种规则可以找到44个搜索结果,正好是淘宝搜索结果页一页的商品数,于是,我们就可以构造出商品详情页的url, 继续阅读 >>


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


何攀 18/01/06 23:14:32
1. 在GitHub上找到自己想要参与的开源项目,然后Fork一份到自己的仓库,这里我们以目前相当火的开源项目LEP为例,先简单介绍一下LEP: LEP 的全称是 Linux Easy Profiling(Linux 易用剖析器),核心特点在于 Easy(简单),主要功能在乎 Profiling(剖析)。LEP 的网址是 http://www.linuxep.com,网站基于 Docker 部署,代码仓库位于:https://github.com/linuxep,LEP 的设计目标是:便利 Linux 的程序员,以最快最直接的方式,定位到系统里面一些 bug的源头,以及一些性能瓶颈的原因。Linux 有很多现成的调试和剖析工具,比如 top、vmstat、iotop、perf、valgrind、powertop、free 、 pmap 、 slabtop 等,这 些 工 具 通 过 读 取 /proc 、 /sys,分 析 硬 件 的 PMU(Performance Monitor Unit)数据、监控 继续阅读 >>


何攀 17/11/25 22:11:27
  首先,我们来看一下CSDN博客专家的链接: http://blog.csdn.net/experts.html 上图为 CSDN 所有博客专家页面,点击下一页后发现每次 url 都不会改变,但是已经翻页了,检查网页元素如下图:    我们发现可以通过 value 值来构造 url 实现翻页,&page=1代表第一页,先来看一下构造的 CSDN 博客专家首页: http://blog.csdn.net/peoplelist.html?channelid=0&page=1,没有了刚才炫酷的样式,但是并不影响我们爬取数据。 这里,我们随机访问一位博主的首页,然后点击下一页:    可以发现 list 后面的数字就是页码,通过它可以构造博主所有文章翻页 url,然后爬取每页博文 url,最后爬取博文详情页信息。下面开始编写爬虫,创建项目请参考:Scrapy简明教程(二)——开启Scrapy爬虫项目之旅,下面直接讲编写 继续阅读 >>


何攀 17/09/18 22:44:01
 本篇博文将介绍 Scrapy 爬取 CSDN 博文详情页并写入文件,这里以 http://blog.csdn.net/oscer2016/article/details/78007472 这篇博文为例: 1. 先执行以下几个命令: scrapy startproject csdnblog cd csdnblog/ scrapy genspider -t basic spider_csdnblog csdn.net 2. 编写 settings.py : 设置用户代理,解除 ITEM_PIPELINES 注释,用户代理可在审查元素中查看: # 修改以下两处 vim csdnblog/settings.py USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36' ITEM_PIPELINES = { 继续阅读 >>


何攀 17/09/17 20:27:41
1. 启动项目:   安装好 Scrapy 以后, 我们可以运行 startproject 命令生成该项目的默认结构。具体步骤为: 打开终端进入想要存储 Scrapy 项目的目录,然后运行 scrapy startproject <project name>。这里我们用 FirstProject作为项目名: scrapy startproject FirstProject 以下是 scrapy 命令生成的文件结构: FirstProject/ ├── FirstProject │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ └── __init__.py └── scrapy.cfg 其中比较重要的几个文件如下所示: scrapy.cfg: 项目配置文件。 setti 继续阅读 >>


何攀 17/09/16 23:09:11
1. 认识 Scrapy 框架:  中文文档: http://scrapy-chs.readthedocs.io/zh_CN/0.24/index.html  英文文档: https://doc.scrapy.org/en/latest/index.html   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy中的数据流由执行引擎控制,其过程如下: (1) 引擎打开一个网站(open a domain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。 (2) 引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。 (3) 引擎 继续阅读 >>


何攀 17/09/14 20:19:23
1. MongoDB简介:   MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB中的一条记录就是一个文档,是一个数据结构,由字段和值对组成。MongoDB文档与JSON对象类似。字段的值有可能包括其它文档、数组以及文档数组。 2. MongoDB安装(CentOS7):  详见 http://blog.csdn.net/jssg_tzw/article/details/53437430 3. MongoDB配置远程连接(以CentOS为例): (1) 启动mongod服务: systemctl start mongod (2) 查看数据库版本: [root@aliyun ~]# mongo MongoDB shell version v3.4.7 connecting to: mongodb://127.0.0 继续阅读 >>


何攀 17/08/25 22:25:30
MySQL C API:  官方英文版 中文参考手册 代码示例: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h> #define HOST "localhost" #define USER "root" #define PASSWD "HEpan693640." #define DB_NAME "TESTDB" void my_error(const char *err_string, int line); // 错误处理函数 void mysql_connect(MYSQL *mysql); // 连接mysql数据库 void show_databases(MYSQL *mysql); // 显示所有数据库 void 继续阅读 >>


何攀 17/08/02 02:04:26
  首先找到你需要的字体,比如我就是从 windows 系统里拷出来的,C:\WINDOWS\Fonts 这里有很多字体,我只拷贝了simhei.ttf 和 simsun.ttc。   安装 Java 后,在 Java 的安装目录 /usr/local/jdk1.6.0_45/jre/lib/fonts/ 可以看到很多字体,在这里新建个目录,名字叫 fallback(就用这个名字吧,据说 ubuntu 找不到设定的字体的时候就到这个目录里找字体), 并且把你需要的字体拷贝到这个目录。 $mkdir fallback $sudo cp ./your font dir/simhei.ttf fallback/ $sudo cp ./your font dir/simsun.ttc fallback/   接下来要注意了,很多资料并没有说明这一点,那就是字体文件的权限,一定要可读!我就是这里没注意,结果折腾了好多天,最后才发现。 $cd fallback/ $sudo chmod 644 simh 继续阅读 >>


何攀 17/07/31 16:57:31