初学爬虫,设计一个定向爬虫策略,请大家帮我看看,是否合理?

2016-06-17 16:30:34 +08:00
 DingYuanfang

哪些地方需要改进和注意的地方,或更好的爬虫策略。

下面是伪代码 欢迎批评指正!

数据模型

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 到数据库

3408 次点击
所在节点    Python
9 条回复
murmur
2016-06-17 16:43:02 +08:00
代码我就不看了
总结一下:
( 1 )如果是真的用的爬虫,而不是出于练习目的,那么任何一个开源爬虫都比你的好,无论是 nutch 还是 scrapy 还是其他的
( 2 )即便是练习,重点也要放在内容提取,就是定向爬虫部分,而不是仅仅收录就可以,比如你去比价,去抓评价,所以可以基于一个现有的爬虫开发,去做垂直抓取那部分
( 3 )爬虫的异常处理永远是难点,尤其是有随机插入白色字符的、需要注册的、访问太快就 ban 的、要验证码的等
practicer
2016-06-17 16:53:50 +08:00
@murmur 题主目前在学习阶段,经过自己构思策略后,再对学 scrapy 等框架百宜而无一害。

我提一个想法,第三步改成让爬虫递归按当前路径向下钻,设置一个递归层次的参数,限制无限递归。例如这个参数设为 3 ,那么爬 abc.com/beijing/这个路径的时候,自动抓链接抓到 abc.com/beijing/1st-layer/2nd-layer/3rd-layer
murmur
2016-06-17 16:55:16 +08:00
@practicer 看我写的,建议一开始研究一个模块,当然就是内容提取这部分,这里会遇到各种真实的问题,会看到别的公司高薪聘请的程序员是怎么恶心你的,然后这里写好了 python 相关掌握差不多再来搞架构不更好
chendajun
2016-06-17 16:55:30 +08:00
定向爬虫的话还是用开源爬虫吧。在用 Scrapy ,目前大概 400 个爬虫任务,基本稳定。
DingYuanfang
2016-06-17 17:43:08 +08:00
@murmur @practicer 嗯,你们说的大概能明白,非常感谢,关于使用框架会考虑的。补充了一点场景。
@chendajun 谢谢回复,安装过 Scrapy 失败了... 会接触 Scarpy 的。
qdk0901
2016-06-17 21:30:21 +08:00
并发数 10 个就掉 wifi ?
我用 nodejs 爬 tumblr 图片,并发数 1000 都没什么问题。
slysly759
2016-06-18 16:20:32 +08:00
感觉写的不错呀
可以交流一下喵 好像在站上没有找到私信功能
@DingYuanfang
DingYuanfang
2016-06-18 19:40:18 +08:00
@slysly759 qq 574985696
sosozzzx
2016-08-29 16:26:53 +08:00
关注这个博客很久了,写的爬虫教程很多,关键是教程好细致,特色适合初学者
推荐给你看看

youmumzcs 的专栏
http://blog.csdn.net/youmumzcs?viewmode=contents

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX