博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyspider抓取数字货币价格bitcoin
阅读量:4295 次
发布时间:2019-05-27

本文共 2069 字,大约阅读时间需要 6 分钟。

上一篇文章讲了pyspider的安装(ubuntu18)

第一步,找数据源,发现数据源url的pattern

试试抓取数字货币价格,

数据源:

点击历史数据,然后选择开始结束日期:

可以发现查询历史价格的URLpattern,

base_url=y

xx=开始时间,yyyymmdd

yy=结束时间,yyyymmdd

爬虫默认模板代码:

def on_start(self):        base_url='https://coinmarketcap.com/zh/currencies/bitcoin/historical-data/?start=#START#&end=#END#'        year_list=['2015','2016','2017','2018']        month_list=range(1,13)        for year in year_list:            for month in month_list:                start_date=year+str(month).rjust(2,'0')+'01'                end_date=year+str(month).rjust(2,'0')+'31'                self.crawl(base_url.replace('#START#',start_date).replace('#END#',end_date), callback=self.detail_page)

从2015年01月开始抓取,到2018年12月。

需要注意的是每个月都按照31天处理的,尝试了网页可以正常返回不会报错。

第二步,解析页面内容

构造好url地址后,就是解析页面内容了。

修改爬虫模板代码:

def detail_page(self, response):        return {            "url": response.url,            "title": response.doc('title').text(),            "text_right":response.doc('tr.text-right').text()        }

添加了字段,text_right,这个字段就是网页table的正文。提取出正文后,还要将数据切分为一行一行的,然后每一行映射为特定字段,保存到文本csv或者数据库中,这些如果需要自行实现下吧。

上面稍微麻烦的是定位需提取内容的css的表达式。这本来是一件比价恶心(耗时,易错)的事情,我上学那阵子是很烦这个的。不过,pyspider已经做了非常强大的封装处理,网页上可以可视化选择,自动生成css选择的表达式,直接使用就行了。

这个我也是第一次使用,不妨演示下

一般点击1,2,4就行了,不用复制出来,点击4之前光标移动到输入选择器位置就行了 。

第三步,保存结果

通过重写on_result方法保存结果,

例如:

def on_result(self,result):        if not result or not result['original_id']:            return        sql = SQL()        sql.insert('t_dream_xm_project',**result)

这里的每个result都是上面构造的map形式数据,本文中是key为url,title,text_right的map

这里的text_right是包含所有行列的文本串,需要进一步解析。

解析的工作有时候放到第二步也可以,第二步中text_right可以直接构造为list返回过来,个人更喜欢抓取和解析包村分离操作,抓取只负责将数据load下来,至于后续解析由其他模块负责。

还有一种更好的思路是直接获取到对方网址拉取数据的接口,通过直接向接口发送查询数据获得结构化的数据,然后直接解析入库。这种方式基本上不需要爬虫进行css选择器之类的处理了。

 

其他可参考技术

1,,使用代理

验证代理有效性:
参考:https://www.jianshu.com/p/588241a313e7
import requests
try:
  requests.get('http://wenshu.court.gov.cn/', proxies={"http":"http://121.31.154.12:8123"})
except:
  print 'connect failed'
else:
  print 'success'
后续可以使用专业代理工具:squid

2,伪装浏览器头部

fake-useragent库:伪装浏览器Header
参考:https://blog.csdn.net/jmshl/article/details/88687752

 

你可能感兴趣的文章
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>