PY简易爬虫
然而,实用性很差,仅仅是能用而已。
已知bug:
由于土啬的问题,经常会炸掉。网络不稳定导致各种Connection Aborted/SSLError: EOF occurred in violation of protocol.
引入新的bug,无法记录错误啊啊啊!
解决方案:
已修复,添加异常处理,一次超时重试三次,超时值设定为1s。三次超时访问下一个页面,同时记录错误信息。
已修复,改了下代码。
程序运行速度已经有了很大的提高[约3pv/(s/thread)]
bug已经修复。
乱写的+现学现卖。
鸣谢:百度爬虫,感谢它的无私奉献(Anti-Anti-Spider Technology)
效果(速度不太稳定,约在1s/pv~10s/pv间波动):
(已经有了较大变化)
多进程生成器:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import codecs
for i in range(1,7000):
f = open(str(i*10)+'k'+'.py','w')
f.write('''# coding:utf-8
import re
import requests
import time
headers = {
'User-Agent':'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
}
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20) sess.mount('https://', adapter)
for i in range ('''+str(10000*i)+''','''+str((i+1)*10000)+'''):
print(str(i))
url = "https://www.pixiv.net/member_illust.php?mode=medium&illust_id="+str(i);
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
err = open('err'+str(i)+'.log',"a")
err.write(str(i)+"\\n")
err.close
continue
if r.status_code != 200:
continue
data = r.text
pattern = u'class="text">初音ミク</a>'
piclist = re.findall(pattern,data)
if len(piclist):
f = open("'''+str(i*10)+'k-'+str((i+1)*10)+'k'+'''.txt","a")
f.write(str(i)+'\\n')
f.close()''')
f.close()
生成实例:
# coding:utf-8
import re
import requests
import time
headers = {
'User-Agent':'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
}
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20) sess.mount('https://', adapter)
for i in range (69990000,70000000):
print(str(i))
url = "https://www.pixiv.net/member_illust.php?mode=medium&illust_id="+str(i);
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
try:
r = sess.get(url,headers = headers,timeout = 1)
except:
err = open('err'+str(i)+'.log',"a")
err.write(str(i)+"\n")
err.close
continue
if r.status_code != 200:
continue
data = r.text
pattern = u'class="text">初音ミク</a>'
piclist = re.findall(pattern,data)
if len(piclist):
f = open("69990k-70000k.txt","a")
f.write(str(i)+'\n')
f.close()
UPDATE: 回家后更新多进程版,速度约25w pv/h.结合bash脚本实现不间断爬虫。然而还是很慢(摊手)。代码大范围重构,补了一点信息(回家后就能跑完了hhh)。稳定性有了提高(1000Wpv无错误)???
系统要求:
Linux主流发行版
内存8G(主进程虚拟内存2G,物理内存2G,worker进程不清楚,反正能跑,总内存消耗大约是4.4G左右)
四核CPU(占用率大约是170%-200%+)
40Mbps网络(外网,速度不是很稳定,约10-30Mbps左右)
------------------------------------------------------
150进程(然而实践证明100进程足矣)???
引入新的bug:单文件7000W数量级,gc会炸掉。orz.
PY简易爬虫的更多相关文章
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- 使用 HttpClient 和 HtmlParser 实现简易爬虫
这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...
- php+phpquery简易爬虫抓取京东商品分类
这是一个简单的php加phpquery实现抓取京东商品分类页内容的简易爬虫.phpquery可以非常简单地帮助你抽取想要的html内容,phpquery和jquery非常类似,可以说是几乎一样:如果你 ...
- [转]使用 HttpClient 和 HtmlParser 实现简易爬虫
http://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ http://blog.csdn.net/dancen/article/d ...
- 爬虫系列1:python简易爬虫分析
决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例. 1.单个网页的简易爬虫 以下爬虫的主要功能是爬取百度贴吧中某一页面的所有图片.代码由主要有两个函数:其中getHtml()通过页面u ...
- nodeJS实现简易爬虫
nodeJS实现简易爬虫 需求:使用nodeJS爬取昵图网某个分类下的图片并存入本地 运用nodeJS自带系统模块http.fs 示例代码: var http =require('http'); va ...
- 利用简易爬虫完成一道基础CTF题
利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如 ...
- day17 python re模块 简易爬虫
day17 python 一.re模块 1.re模块的基础方法 查找findall() import re #re.findall(pattern,string,flags ...
- NodeJS概述2-事件插件-简易爬虫
事件 events 模块 原生事件写法 /* * 1. 事件分类 * DOM0级 事件 - on + eventType * DOM2级 事件 - 事件监听 * 2. 事件构成部分有哪些? dom.o ...
随机推荐
- scp and tar
scp 命令随记 scp file username@remoteIp:directory 创建tar包 tar zcvf file.tar.gz directory tar zcvf hadoop. ...
- runloop简单介绍
runloop是iOS底层机制中保持我们的程序一直运行的机制.他可以让线程一直循环不退出.而在我们正常的编程中.线程其实是线性的,当线程处理完我们的代码以后就自动退出了.runloop就是保证我们的应 ...
- BNU 13289 Energetic Pandas DP
Energetic Pandas There are n bamboos of different weights Wi. There are n pandas of different capa ...
- SQL SEVER 死锁// 解除死锁
SQL SEVER 死锁 USE mastergo CREATE PROC killspid (@dbname VARCHAR (20))AS BEGIN DECLARE @sql NV ...
- 杂项:ASP.NET Web API
ylbtech-杂项:ASP.NET Web API ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web A ...
- 杂项:MIS(管理信息系统)
ylbtech-杂项:MIS(管理信息系统) 管理信息系统(Management Information System,简称MIS)是一个以人为主导,利用计算机硬件.软件.网络通信设备以及其他办公设备 ...
- preg_match_all匹配网络上文件
<?php$ssa=file_get_contents("http://www.oschina.net/code/snippet_4873_5256");preg_match ...
- php处理类
Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Python, PHP, OCaml等等诸多编程语言的支 ...
- ROS-URDF-Gazebo
前言:在gazebo里运行urdf文件 一.安装教程包 cd ~/catkin_test/srcgit clone https://github.com/ros/urdf_sim_tutorial.g ...
- 将DataTable某一列的值整体赋值给 另一个DataTable
将 DataTable某一列的值,赋值给 另一个DataTable: DataSet _ds=bll.GetAllList(); //将要取其中一列 DataView view = _ds.Table ...