python程序运行原理_Python爬虫程序架构和运行流程原理解析

Python爬虫程序架构和运行流程原理解析

1 前言

Python开发网络爬虫获取网页数据的基本流程为:

发起请求

通过URL向服务器发起request请求,请求可以包含额外的header信息。

获取响应内容

服务器正常响应,将会收到一个response,即为所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频、图片)等。

解析内容

如果是HTML代码,则可以使用网页解析器进行解析,如果是Json数据,则可以转换成Json对象进行解析,如果是二进制的数据,则可以保存到文件做进一步处理。

保存数据

可以保存到本地文件,也可以保存到数据库(MySQL,Redis,MongoDB等)。

blank.gif

2 爬虫程序架构及运行流程

blank.gif

网络爬虫程序框架主要包括以下五大模块:

爬虫调度器

URL管理器

HTML下载器

HTML解析器

数据存储器

五大模块功能如下所示:

爬虫调度器:主要负责统筹其它四个模块的协调工作。

URL管理器:负责管理URL链接,维护已经爬取的URL集合和未爬取的URL集合,提供获取新URL链接的接口。

HTML下载器:用于从URL管理器中获取未爬取的URL链接并下载HTML网页。

HTML解析器:用于从HTML下载器中获取已经下载的HTML网页,并从中解析出新的URL链接交给URL管理器,解析出有效数据交给数据存储器。

数据存储器:用于将HTML解析器解析出来的数据通过文件或者数据库的形式存储起来。

网络爬虫程序框架的动态运行流程如下所示:

blank.gif

3 小结

本文简要介绍了Python开发网络爬虫的程序框架,将网络爬虫运行流程按照具体功能划分为不同模块,以便各司其职、协同运作。搭建好网络爬虫框架后,能够有效地提高我们开发网络爬虫项目的效率,避免一些重复造车轮的工作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-03-07

使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象 我们在淘宝里搜索"python",出来的结果 从url连接中可以得到搜索商品的关键字是"q=",所以我们要用的起始url为:https://s.taobao.com/search?q=python 然后翻页,经过对比发现,翻页后,变化的关键字是s,每次翻页,s便以44的倍数增长(可以数一下每页显示的商品数量,刚好是44) 所以可以根据关键字"s=",来设置爬取的深度(爬取多少页)

我就废话不多说啦,大家还是直接看代码吧! import requests,random from lxml import etree import threading import time angents = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compati

requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML页面格式,这里我们常用的就是beautifulsoup4库,用于解析和处理HTML和XML 下面这段代码便是爬取百度的信息并简单输出百度的界面信息 import requests from bs4 import BeautifulSoup r=requests.get('http://www.bai

像iqiyi这种视频网站,现在下载视频都需要下载相应的客户端.那么如何不用下载客户端,直接下载非vip视频? 选择你想要爬取的内容 该安装的程序以及运行环境都配置好 下面这段代码就是我在爱奇艺里搜素"英文名",然后出来的视频,共有20页,那么我们便从第一页开始,解析网页,然后分析 分析每一页网址,找出规律就可以直接得到所有页面 然后根据每一个视频的URL的标签,如'class' 'div' 'href'......通过bs4库进行爬取 而其他的信息则是直接循环所爬取到的URL,在每一个

实例一--爬取页面 import requests url="https//itemjd.com/2646846.html" try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding print(r.text[:1000]) except: print("爬取失败") 正常页面爬取 实例二--爬取页面 import requests url="https://w

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 代码如下 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.

python爬虫模块Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序.Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码.你不需要考虑编码方式,除非

python爬虫模块Request的安装 在cmd中,使用如下指令安装requests: pip install requests python爬虫模块Request快速上手 Requests 已安装 Requests 是最新的 Request模块发送请求 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取 Github 的公共时间线: >>> r

PyQt5图片显示控件QPixmap介绍 QPixmap类用于绘图设备的图像显示,它可以作为一个QPainterDevice对象,也可以加载到一个控件中,通常是标签或者按钮,用于在标签或按钮上显示图像 QPixmap可以读取的图像文件类型有BMP,GIF,JPG等 QPixmap类中常用的方法 方法 描述 copy() 从QRect对象复制到QPixmap对象 fromImage() 将QImage对象转换为QPixmap对象 grabWidget() 从给定的一个窗口小控件创建一个像素图 gr

PyQt5切换按钮控件QPushButton简介 QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstractButton类,来实现不同的功能和表现形式,常见的按钮QPushButton,QToolButton,QRadioButton和QCheckBox这些按钮均继承自QAbstractButton类,根据各自的使用场景通过图形显示出来 QAbstractButton提供的状态如下表 状态 含义 isDown() 提示按钮是否已按下 isChecked() 提

PyQt5日期时间控件QDateTimeEdit介绍 QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘上的上下键头按钮来增加或减少日期的时间值,QDateTimeEdit通过setDisplayFormat()函数来设置显示的日期时间格式 QDateTimeEdit类中常用方法 方法 描述 setDisplayFormat 设置日期的时间格式 yyyy:代表年份,用4为数表示 MM:代表月份,取值范围01-12 dd:代表日,取值范围01-31 HH:代表小时,取值范围0

PyQt5菜单栏控件QMenuBar介绍 QMenuBar在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象 QMenuBar类提供了一个可以包含一个或多个QAction对象或 级联的QMenu对象,要创建一个弹出菜单,Pyqt提供了createPopupMenu()函数,menuBar()函数用于返回主窗口的QMenuBar对象:addMenu()函数可以将菜单添加到菜单栏中,通过addAction()函数可以在菜单中进行添加操作 设计菜单系统时常用的一些

PyQt5滑块条控件QSlider介绍 QSlider控件提供一个垂直或者水平的滑动条,滑动条是一个用于控制有界值典型的控件,它允许用户沿水平或者垂直方向在某一范围内移动滑块,并将滑块所在的位置转换为一个合法范围内的整数值,有时候这中方式比输入数字或者使用SpinBox(计数器·)更加自然,在槽函数中对滑块所在位置的处理相当于从整数之间的最小值和最高值进行取值 一个滑块条控件可以以垂直或者水平的方式显示,在构造函数中进行设置 self.sp=QSlider(Qt.Horizontal) self

PyQt5工具栏控件QToolBar介绍 QToolBar控件是由文本按钮,图标或其他小控件按钮组成的可移动面板,通常位于菜单栏下方 QToolBar类中的常用方法 方法 描述 addAction() 添加具有文本或图标的工具按钮 addSeperator() 分组显示工具按钮 addWidget() 添加工具栏中按钮以外的控件 addToolBar() 使用QMainWindow类的方法添加一个新的工具栏 setMovable() 工具变得可移动 setOrientation() 工具栏的方向

PyQt5树形结构控件QTreeWidget简介 QTreeWidget 类根据预设的模型提供树形显示控件. QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的"模型/视图"结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类. 如果不需要灵活的"模型/视图"框架,可以使用QTreeWidget 来创建有层级关系的树形结构.当把标准 ite

爬虫所需要的功能,基本上在urllib中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests库. 首先 在Pytho2.x中使用import urllib2---对应的,在Python3.x中会使用import urllib.request,urllib.error 在Pytho2.x中使用import urllib---对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse 在Pytho2.x中使

你可能感兴趣的:(python程序运行原理)