Python树莓派 爬虫心得
平台: 树莓派 linux
语言:python
搞一个爬虫都清楚是怎么回事,我这里玩过之后有下面的心得:
为什么要用树莓派呢,省电啊,没乱七八糟的桌面问题,可以一直开着。
1.树莓派上的磁盘写入对于不同格式是有区别的,我试过跑ntfs,开10线程就完全卡死不动了,wa(wait for io)很高。看了下原因是ntfs代码效率不高而且是在用户层的fuse基础上的,所以放弃换了ext4,后来又测试了一下准备上fat32(windows linux兼容)。顺带试了一下vfat,也是fuse的,就是知道不行了。测试数据如下:
* dd写入1GB sudo mount /dev/sdb1 ~/tanhangbo
sudo dd bs=1M count=1K if=/dev/zero of=test.bin oflag=dsync * dd读取1GB sudo dd bs=1M count=1K if=test.bin of=/dev/null oflag=dsync ---> ntfs (需要fuse) W: 275.428 s, 3.9 MB/s
R: 54.1916 s, 19.8 MB/s ---> exfat (需要fuse) W: 123.785 s, 8.7 MB/s
R: 45.3635 s, 23.7 MB/s ---> fat32 sudo mount -t vfat /dev/sdb1 ~/tanhangbo -o rw,umask=0000
问题不大,开10~20个线程下图片 2~3MB/s W:62.3962 s, 17.2 MB/s
R:36.0879 s, 29.8 MB/s ---> ext4 W:111.132 s, 9.7 MB/s
R:37.3983 s, 28.7 MB/s ---> ext3 格式化很慢 W:89.2118 s, 12.0 MB/s
R:35.6953 s, 30.1 MB/s ---> ext2 格式化很慢 W:162.789 s, 6.6 MB/s
R:35.5818 s, 30.2 MB/s
小文件我就没去测了,大概看了一下fat32可以hold住,python爬起来跑了一下也没有大压力,关键是win&linux兼容,就非他不可了。不过fat32小问题就是没有日志,小心用就好了。要注意的是win下面自带分区软件不行,要下一个diskgenius来分区。
2.多线程爬比较好,虽然python多线程是假的,但是这是IO密集型没关系。我测试树莓派2B爬20个线程差不多了,再多就cpu满了。我先第一遍把url全部爬下来塞到一个sqlite数据库里面,再写个多线程代码,用多线程队列负载均衡爬。负载均衡策略比较简单,哪个队列东西少就放到哪个队列里面。每一个队列的大小和线程数量都可以自己设置,这样比较方便。
3.错误处理一定要做好。遇到磁盘错误或者404或者其他问题如果不处理好,放在那里爬就完蛋了。半天时间就浪费掉了。try catch一定要做好。日志也要放好看看到底哪里出错了。脚本也要做好补爬单策略因为网络超时这些问题。用数据库+补爬策略+本地存储应该没问题,跑个两三遍基本上可以爬完。
数据量一大就可以进行数据处理或者建一个网站处理了,这是后面的事情了,暂时考虑到用flask+bootstrap,这样比较轻量级,要做的好一点前端就用nodejs的webpack来处理了,后端用django。
Python树莓派 爬虫心得的更多相关文章
- python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...
- Python简单爬虫入门三
我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...
- Ubuntu下配置python完成爬虫任务(笔记一)
Ubuntu下配置python完成爬虫任务(笔记一) 目标: 作为一个.NET汪,是时候去学习一下Linux下的操作了.为此选择了python来边学习Linux,边学python,熟能生巧嘛. 前期目 ...
- Python简单爬虫入门二
接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...
- [Python] 网络爬虫和正则表达式学习总结
以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- GJM : Python简单爬虫入门(二) [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- python urllib2使用心得
python urllib2使用心得 1.http GET请求 过程:获取返回结果,关闭连接,打印结果 f = urllib2.urlopen(req, timeout=10) the_page = ...
- Python分布式爬虫原理
转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...
随机推荐
- Docker部署ELK之部署filebeat7.6.0(3)
1. filebeat介绍 Filebeat是用于转发和集中日志数据的轻量级传送工具.Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logsta ...
- Shell-15-脚本练习
批量生成随机字符串文件名 # 用for循环在 /test 目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字符加固定字符串 alnk #!/bin/bash ########### ...
- sql server时间转换
--getdate 获取当前时间 select getdate() --dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月 select dateadd(MONTH ...
- JavaSE-方法
何谓方法 比如之前用到的 System.out.println(); System为一个类:out为这个类的一个输出对象:println()为这个对象的方法 调用System类中out输出对象的pri ...
- python-scrapy框架学习
Scrapy框架 Scrapy安装 正常安装会报错,主要是两个原因 0x01 升级pip3包 python -m pip install -U pip 0x02 手动安装依赖 需要手动安装 wheel ...
- NOIP 模拟 $32\; \rm Six$
题解 二维状压. 第一维直接压选不同质因子的方案,第二位压方案. 分两种讨论,显然一种方案最多出现两次,否则就不合法了,所以一种是出现了一次的,另一种是出现了两次的,这样可以减小状态数. 实现可以用 ...
- MyBatiesPlus+Redis分布式缓存
一.开启二级缓存 cache-enabled: true # mybatis-plus相关配置 mybatis-plus: # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 X ...
- Qt MDI及其使用方法(详解版)
统的应用程序设计中有多文档界面(Multi-document Interface,MDI)应用程序,Qt 为设计 MDI 应用程序提供了支持. 本节的实例 samp6_4 是一个 MDI 应用程序,程 ...
- JS对象创建的几种方法
最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式.话不多说,直接步入正题. 第一种:Object构造函数创建 var Person = new Object(); Person.n ...
- cmd关闭端口占用
netstat -nao |findStr "8080" taskkill /pid 15406 /f