哪些地方需要改进和注意的地方,或更好的爬虫策略。
下面是伪代码 欢迎批评指正!
数据模型
class Obj:
pass
常量
Objs = [] 对象容器
IPS = [] 代理池
函数
1. 构造代理 ip 池
def build_ips():
....
return ips
2. 下载页面
- 随机选取代理 ip 下载页面,限制 timeout ,超时或异常更换 ip ,最多重试 5 次
- 基础页下载(含 params 参数),详细页下载不含参数
def download_html(url,params=None)
....
return html
3. 构造参数组合(不包含页码)
- 如:城市+关键字 的组合
def build_params_lst(citys,kds):
....
return params_lst
4. 解析基础页(带请求参数,不含页码),构造 Obj-->Objs
- 页码上限设置很大。
- 参数=原参数+页码。
- 解析基础信息(至少包含详细页面 url)并 push 到 Objs 列表
- 该页码下内容为空则 return ,中断页码遍历
def parse_html(params)
obj = Obj()
obj.name = ....
....
Objs.append(obj)
return None
5. 解析详细页面,更新 obj 详细信息。
def get_detail(obj):
url = obj.url
....
obj.detail = ...
return None
程序执行
1. IPS = build_ips()
2. params_lst = build_params_lst()
3. 多线程基础下载解析 函数: parse_html 参数迭代器: params_lst
4. 多线程详细页面下载解析 函数: get_detail 参数迭代器 Objs
5. 遍历 Objs ,添加 obj 到数据库
我的想法是爬取主要的所有的招聘网站做一个It垂直搜索引擎。
已经看到挖工作网实现这个想法。职友网的搜索做的很差。
想实现一个高效的爬虫,能每天实时更新数据库。
requests+lxml+Mysql+redis
准备学习分布式爬虫,用阿里云弹性伸缩服务器,自动晚上开机爬取。
访问速度,通过代理ip,可以解决。 内容提取,网页结构化,xpath比较容易提取。 网站不需要登录
希望实现一个爬虫策略 效率高,结构清晰,代码简洁好读,便于自己理解和维护。
1
murmur 2016-06-17 16:43:02 +08:00
代码我就不看了
总结一下: ( 1 )如果是真的用的爬虫,而不是出于练习目的,那么任何一个开源爬虫都比你的好,无论是 nutch 还是 scrapy 还是其他的 ( 2 )即便是练习,重点也要放在内容提取,就是定向爬虫部分,而不是仅仅收录就可以,比如你去比价,去抓评价,所以可以基于一个现有的爬虫开发,去做垂直抓取那部分 ( 3 )爬虫的异常处理永远是难点,尤其是有随机插入白色字符的、需要注册的、访问太快就 ban 的、要验证码的等 |
2
practicer 2016-06-17 16:53:50 +08:00
@murmur 题主目前在学习阶段,经过自己构思策略后,再对学 scrapy 等框架百宜而无一害。
我提一个想法,第三步改成让爬虫递归按当前路径向下钻,设置一个递归层次的参数,限制无限递归。例如这个参数设为 3 ,那么爬 abc.com/beijing/这个路径的时候,自动抓链接抓到 abc.com/beijing/1st-layer/2nd-layer/3rd-layer 。 |
3
murmur 2016-06-17 16:55:16 +08:00
@practicer 看我写的,建议一开始研究一个模块,当然就是内容提取这部分,这里会遇到各种真实的问题,会看到别的公司高薪聘请的程序员是怎么恶心你的,然后这里写好了 python 相关掌握差不多再来搞架构不更好
|
4
chendajun 2016-06-17 16:55:30 +08:00
定向爬虫的话还是用开源爬虫吧。在用 Scrapy ,目前大概 400 个爬虫任务,基本稳定。
|
5
DingYuanfang OP |
6
qdk0901 2016-06-17 21:30:21 +08:00
并发数 10 个就掉 wifi ?
我用 nodejs 爬 tumblr 图片,并发数 1000 都没什么问题。 |
7
slysly759 2016-06-18 16:20:32 +08:00
|
8
DingYuanfang OP @slysly759 qq 574985696
|
9
sosozzzx 2016-08-29 16:26:53 +08:00
关注这个博客很久了,写的爬虫教程很多,关键是教程好细致,特色适合初学者
推荐给你看看 youmumzcs 的专栏 http://blog.csdn.net/youmumzcs?viewmode=contents |