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 ...
随机推荐
- PF, Page File, 页面文件
PF, Page File, 页面文件 是硬盘中用来当作内存使用的,仅仅提高物理内存可能导致CPU使用率高,因为降低了命中率: 学习了:https://baike.baidu.com/item/PF% ...
- HDU--1054--Strategic Game【最小点覆盖】
链接:pid=1054">http://acm.hdu.edu.cn/showproblem.php?pid=1054 题意:一个熊孩子玩策略游戏,他须要用最少的士兵守卫最多的道路.假 ...
- iOS 通讯录编程【总结】
第一大块儿:读取通讯录 1.iOS 6以上系统,争取获取用户允许: 初始化的时候须要推断.设备是否授权 -(id)init{ self = [super init]; [self createdABH ...
- PHP中JSON的应用
文章来源:PHP开发学习门户 地址: http://www.phpthinking.com/archives/513 互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会马上想起因R ...
- 创建虚拟机中的nova-scheduler 调度配置
一个Openstack 系统中通常包括多个计算节点 root@controller:/etc/nova# nova hypervisor-list +----+-------------------- ...
- 每日总结-05-19(AC自己主动机结束)
今天下午讨论了一下校赛的题,最终最终拍板,把校赛的题目定下来了. 然后今天A掉了4个AC自己主动机的题目.最终完毕了AC自己主动机专辑里面的15个题.至此AC自己主动机全然结束. 明天开启线段树专题. ...
- 一句话实现Mysql查询结果带行号
SELECT @rowno:=@rowno + 1 AS rowno,a.* FROM tableName a,(SELECT @rowno:=0) b
- jQuery - 广告图片轮播切换
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- springboot 异常: Requested bean is currently in creation: Is there an unresolvable circular reference?
2018-07-31 11:56:18.812 WARN 10316 --- [ main] ConfigServletWebServerApplicationContext : Exception ...
- bzoj4241 历史研究——分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 就是分块,预处理出从第 i 块到 j 位置的答案,以及从第 i 块到最后位置间每个数出 ...