用Python抓取非小号网站数字货币(一)

一、环境

OS:win10

python:3.6

scrapy:1.3.2

pymongo:3.2

pycharm

环境搭建,自行百度

二、本节内容说明

本节主要抓取非小号收录的所有数字货币的详情链接和数字货币名称。

三、数据库说明1. 货币详情页链接

非小号大概收录了1536种数字货币的信息:

为了后面抓取详细的信息做准备,需要先抓取详情页的地址,所以我们对于数字货币的链接地址数据库设计,只需要货币名称和对应的URL即可,然后是id。如下:

四、抓取说明

由于非小号网站在首页提供了显示全部数字货币的功能,所以我们没有必要分页抓取,偷个懒:

后面的抓取直接使用显示全部数字货币的链接:

1. 新建项目

在你的工作目录里面新建一个scrapy的项目,使用如下命令:

目录结构如下:

2. 设置使用mongodb存储数据

在setting文件里面添加如下信息:

3. MongoDBPipeline定义

在pipelines.py文件里面添加如下类:

为了防止数据重复写入,所以在写入数据之前要判断数据库里面是否已经存储了对应的信息,如果已经存储了,那么更新对应的信息,如果没有存储,直接插入。

4. 建立数据库

在items.py文件里面新建一个Document的类,和我们之前设计的数据库保持一致,相关代码如下:

5. 创建爬虫文件

在spiders目录下面新建一个python文件,命令为CoinSpider.py,作为我们的爬虫文件,在文件里面新建一个CoinSpider的类,继承自Spider。并且需要定义以下三个属性:

name:

用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。

start_urls:

包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。

start_requests() 是spider的一个方法,爬虫运行的时候被调用。

相关代码如下:

6. 页面分析

查看页面的信息,可以发现所有的数字货币的信息都在一个table里面:

而每一个数字货币的详细地址和名称都在它的第一个a标签里面:

所以我们只需要先抓取到每一个数字货币的a标签的内容就可以,通过selector的xpath进行定位:

获取到所有的a标签内容,注意抓取的结果是一个列表。

而我们需要是详细信息的地址和名称都在a标签的链接以及img子标签的alt值里面:

所以我们再通过正则表达式进行提取:

由于是多行提取,所以在代码里面需要加上re.S项,详见后面的代码。

从页面元素可以知道,每个数字货币的Item下面除了有一个我们需要是a之外,还有很多其他的信息也是放到a标签里面:

而这些a标签显然是不符合我们上面提取信息的正则表达式的,所以通过上面的正则表达式,获取到的信息为空,我们只需要过滤这部分信息即可。

详细代码如下:

7. 抓取过程

基本代码已经在文中贴出,写的比较乱,欢迎大家一起讨论。

部分数据截图:

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jed的技术阶梯

Spark性能调优05-Shuffle调优

在Spark的源码中,负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。而随着Spark的版本的发展...

2643
来自专栏coder修行路

Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

关于Scrapy工作流程回顾 Scrapy单机架构 ? 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器...

3297
来自专栏比原链

Derek解读Bytom源码-持久化存储LevelDB

Gitee地址:https://gitee.com/BytomBlockchain/bytom

912
来自专栏Porschev[钟慰]的专栏

Nodejs学习笔记(十一)--- 数据采集器示例(request和cheerio)

写在之前   很多人都有做数据采集的需求,用不同的语言,不同的方式都能实现,我以前也用C#写过,主要还是发送各类请求和正则解析数据比较繁琐些,总体来说没啥不好的...

4868
来自专栏区块链入门

第十课 Solidity语言编辑器REMIX指导大全

【本文目标】 本文翻译和实践Solidity语言编辑器REMIX官网帮助文档,但并不拘泥于逐字翻译,而时根据实践用中文语言讲透编辑器相关功能。 【前置条件】...

2244
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识

本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作。

1082
来自专栏汇智网教程

使用truffle向infura部署以太坊智能合约

5164
来自专栏技术小站

Python3 Scrapy 安装方法

转自:https://blog.csdn.net/zjiang1994/article/details/52689144

1312
来自专栏屈定‘s Blog

工作--JWT实战总结

公司的登录模块也从Session切换到JWT挺长一段时间了,抽时间来总结一下遇到的问题以及解决方案.

4275
来自专栏PHP技术大全

使用PHPCS+GIT钩子保障团队开发中代码风格一致性实践

笔者在6月份加入新团队,新团队这边刚组建起来,基础一些东西还处于待完善状态,比如笔者组内同学约定使用PSR-2的编码风格规范,但是并不是所有人都严格按照PSR-...

1722

扫码关注云+社区

领取腾讯云代金券