Python的爬虫框架主要可以分为以下五个部分:

爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义;

URL管理器:负责URL的管理,包括带爬取和已爬取的URL、已经提供相应的接口函数(类似增删改查的函数)

网页下载器:负责通过URL将网页进行下载,主要是进行相应的伪装处理模拟浏览器访问、下载网页

网页解析器:负责网页信息的解析,这里是解析方式视具体需求来确定

信息采集器:负责将解析后的信息进行存储、显示等处理


代码示例是爬取CSDN博主下的所有文章为例,文章仅作为笔记使用,理论知识rarely

一、爬虫调度器简介

       爬虫调度器作为框架的核心组成部分和爬虫的入口,负责将各个模块进行统一管理和调度,类似于C语言里的main函数。

       爬虫调度器核心框架:

'''
自定义Python伪代码:
''' # 1. 传入待爬取的网站URL链接
# 2. 将URL添加到URL管理器的待爬取url列表中
# 3. 执行爬行策略:
while condition:
#4. 将待爬取的URL从URL管理器中取出,并传递给网页下载器
#5. 将网页下载器下载的网页信息传递给网页解析器
#6. 将网页解析器解析后的新的URL信息添加到URL管理器
#7. 将网页解析器解析后的其他信息传递给采集器
# 8. 爬取完毕

二、爬虫调度器示例:(爬取CSDN博主下的所有文章

# author : s260389826
# date : 2019/3/22
# position: chengdu from cnsd import url_manager
from cnsd import html_downloader
from cnsd import html_parser
from cnsd import html_outputer class SpiderMain:
def __init__(self): # 创建其余四个模块
self.urlManager = url_manager.UrlManager()
self.htmlDownloader = html_downloader.HtmlDownloader()
self.htmlParse = html_parser.HtmlParser()
self.htmlOutputer = html_outputer.HtmlOutputer() # 根据博主名构建博主文章页的完整URL
def getAllUrl(self, usr_blog, page):
return "http://blog.csdn.net/" + usr_blog + "/article/list/" + str(page) + '?' # 爬虫主函数
def crawl(self, usr_blog, total_pages):
if usr_blog is None or total_pages == 0:
print("spider_Main: initial url is None or total_pages is 0")
return
page = 1
seq = 0 root_url = self.getAllUrl(usr_blog, page) # 获取完整的URL
self.urlManager.add_page_url(root_url) # 添加到URL管理器 while self.urlManager.has_page_url():
page_url = self.urlManager.get_page_url() # 取出URL
html = self.htmlDownloader.downloader(page_url) # 下载网页
article_urls = self.htmlParse.parser(page# 解析网页_url, html) # 解析网页
for article_url in artic# 遍历文章的URLle_urls: # 遍历文章的URL
# print(article_url)
seq = seq + 1
html = self.htmlDownloader.downloader(article_url) # 下载文章
self.htmlOutputer.collect(usr_blog, seq, html) # 解析、存储文章
if page < total_pages: # 是否继续爬取下一页
page = page + 1
next_page_url = self.getAllUrl(usr_blog, page)
self.urlManager.add_page_url(next_page_url) # print("-=-=-=-=-=-=-=-=-=-文章数量为:%d=-=-=-=-=-=-=-=-=-=-=-" % len(article_urls))
print("===================csdn spider over====================") '''
该爬虫用来爬取CSDN博客博主的所有文章:
UserBlog : 博主账号名称
page_number : 博主博客下的页码数
'''
if __name__ == '__main__':
# print('Please input your CSDN blog\'name:')
# name = input()
# print('Please input your CSDN blog total pages:')
# page_number = input()
# base_url = 'http://blog.csdn.net/%s' % name
UserBlog = "yunsongice" #" http://blog.csdn.net/s2603898260"
page_number = int(16)
spider = SpiderMain()
spider.crawl(UserBlog, page_number)

三、上述代码用到的知识点:

1. 引用该packet下的其他类文件:

from cnsd import url_manager
from cnsd import html_downloader
from cnsd import html_parser
from cnsd import html_outputer

cnsd:在工程中创建的一个Python pagcket文件, 然后将其命名为“cnsd” (这是个手误操作):

创建后的目录为:

创建完packet目录后,依次创建了如上图所示的五个模块的python文件,引用的便是另外四个的文件名。

2. 通过构造器创建示例对象:

    def __init__(self):  # 创建其余四个模块
self.urlManager = url_manager.UrlManager()
self.htmlDownloader = html_downloader.HtmlDownloader()
self.htmlParse = html_parser.HtmlParser()
self.htmlOutputer = html_outputer.HtmlOutputer()

3. 标记主函数入口:

if __name__ == '__main__':

python3 爬虫五大模块之一:爬虫调度器的更多相关文章

  1. python3 爬虫五大模块之五:信息采集器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  2. python3 爬虫五大模块之三:网页下载器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  3. python3 爬虫五大模块之二:URL管理器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  4. python3 爬虫五大模块之四:网页解析器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  5. python 爬虫 urllib模块 反爬虫机制UA

    方法: 使用urlencode函数 urllib.request.urlopen() import urllib.request import urllib.parse url = 'https:// ...

  6. python 爬虫 urllib模块 目录

    python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...

  7. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  8. golang实现并发爬虫三(用队列调度器实现)

    欲看此文,必先可先看: golang实现并发爬虫一(单任务版本爬虫功能) gollang实现并发爬虫二(简单调度器) 上文中的用简单的调度器实现了并发爬虫. 并且,也提到了这种并发爬虫的实现可以提高爬 ...

  9. golang实现并发爬虫二(简单调度器)

    上篇文章当中实现了单任务版爬虫. 那么这篇文章就大概说下,如何在上一个版本中进行升级改造,使之成为一个多任务版本的爬虫.加快我们爬取的速度. 话不多说,先看图: 其实呢,实现方法就是加了一个sched ...

随机推荐

  1. vue日记之可展开的消息气泡

    项目小需求之聊天气泡可展开内容 因为某些信息内容太长或者某种原因必须分行输出,这就导致了有时候一个气泡占据了一整个聊天区域 所以我打算实现一个在该气泡加载的时候判断其气泡长度,并在长度过长的情况下进行 ...

  2. pycharm配置selenium碰到的问题

    Inherit global site-packages: 导入本地包 Make available to all projects : 使所有项目都可用 chromedriver的版本一定要与Chr ...

  3. Java面向对象13——抽象类

    抽象类  package oop.demon01.demon08; ​ //abstract 抽象类: 类 extends: 类---单继承   (接口可以多继承) public abstract c ...

  4. 开源分享:谷歌大佬联合打造《高级Kotlin强化实战(附Demo)》

    Kotlin 以其简洁的特性而闻名,而在我们的实践中,更加简洁就意味着更加高效.事实上,在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升 ...

  5. spring中的组合模式

    org.springframework.cache.support.CompositeCacheManager /* * Copyright 2002-2016 the original author ...

  6. Redis实现分布式锁那件事

    今天我们来聊一聊分布式锁的那些事. 相信大家对锁已经不陌生了,我们在多线程环境中,如果需要对同一个资源进行操作,为了避免数据不一致,我们需要在操作共享资源之前进行加锁操作.在计算机科学中,锁(lock ...

  7. S3C2440—5.UART的使用

    文章目录 一.S3C2440中的UART介绍 1.1 电平匹配 1.2 UART数据帧与波特率 1.3UART框图 二.UART的配置 2.1 UART引脚的配置 2.2 波特率的配置 2.3 数据帧 ...

  8. 将JDK默认编码设置为UTF-8

    此博文非原创:参考小兵qwer   https://blog.csdn.net/xiaobing_122613/article/details/70209716 只是想留下对自己有用的东西,同时帮助更 ...

  9. NOIP 模拟 $23\; \rm 赛$

    题解 将所有物品分成四类,分别为两人共同喜欢的,只有一人喜欢的,没人喜欢的. 首先,先从两人共同喜欢的物品里找出 \(k\) 个,这时,就要从剩余的找出 \(\rm m-k\) 个,而且是最小的. 用 ...

  10. Linux放大缩小字体的快捷键

    linux终端窗口字体缩放快捷键 环境:linux, 打开终端, 'ctrl' + '-'字体缩小,一行显示更多的内容 'ctrl' + 'shift' + '+'字体变大 ctl+shift+(+) ...