前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简陋的分布式爬虫(附项目代码地址)

简陋的分布式爬虫(附项目代码地址)

作者头像
Python中文社区
发布2018-01-31 16:52:58
5590
发布2018-01-31 16:52:58
举报
文章被收录于专栏:Python中文社区

專 欄

哇咔咔,学习过C, C++, Python, 了解java,html, javascript基础。其中就Python而言,自己写过简单的博客(注册,登录,发帖,删帖,评论),写过几个爬虫。

新手向,基于Redis构建的分布式爬虫。 以爬取考研网的贴子为例,利用 PyQuery, lxml 进行解析,将符合要求的文章文本存入MySQ数据库中。

结构简介

cooperator

协作模块,用于为Master&Worker模块提供代理IP支持

master

提取满足条件的文章url,并交给Worker进一步处理

Worker

解析文章内容,将符合要求的存入数据库

环境依赖

sqlalchemy => 1.0.13 pyquery => 1.2.17 requests => 2.12.3 redis => 2.10.5 lxml => 3.6.0

  1. 需要预先安装MySQL-server 和 Redis-server.
  2. MySQL中应有名为kybsrc的数据库,且该数据库包含一个名为posts的表,拥有num(INT AUTO_INCREMENT)和post(TEXT)两个字段。

如何启动

0. 先配置好各模块所引用的配置文件
1. 为了更好地运行,cooperator/start.py 应提前开始并完成一次工作函数执行

第一次执行完后,每五分钟运行一次工作函数

2. 启动 master/start.py

默认只执行一次

3. 启动 worker/start.py

默认循环监听是否有新的URL待解析

核心点说明

1. 通过Redis的集合类型进行代理IP和URL的传递
代码语言:javascript
复制
# Summary Reference

# ---------

# 创建句柄

def make_redis_handler():

    pool = redis.ConnectionPool(host=r_server['ip'], port=r_server['port'], password=r_server['passwd'])

    return redis.Redis(connection_pool=pool)



# 获得句柄

def make_proxy_handler():

    return make_redis_handler()



# 保存到指定的set下

def check_and_save(self, proxy):

 'pass'

   self.redis_handler.sadd(r_server['s_name'], proxy)
2. 由于在验证代理IP和使用封装的get_url()函数的时候网络IO较多,所以使用多线程(效果还是很明显的)。
代码语言:javascript
复制
#Summary Reference

#---------

def save_proxy_ip(self):

    'pass'

    for proxy in self.proxy_ip:

        Thread(target=self.check_and_save, args=(proxy,)).start()



def get_url(url):

    'pass'

    while True:

    'pass'

        resp = request('get', url, headers=headers, proxies={'http': proxy})

    'pass'

本文项目地址:https://github.com/PyCN/Ugly-Distributed-Crawler

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cooperator
  • master
  • Worker
  • 环境依赖
  • 如何启动
    • 0. 先配置好各模块所引用的配置文件
      • 1. 为了更好地运行,cooperator/start.py 应提前开始并完成一次工作函数执行
        • 2. 启动 master/start.py
          • 3. 启动 worker/start.py
          • 核心点说明
            • 1. 通过Redis的集合类型进行代理IP和URL的传递
              • 2. 由于在验证代理IP和使用封装的get_url()函数的时候网络IO较多,所以使用多线程(效果还是很明显的)。
              • 本文项目地址:https://github.com/PyCN/Ugly-Distributed-Crawler
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档