Python网络爬虫技术与应用-速学!

Python网络爬虫技术与应用-速学!
🕸️ Python网络爬虫
📍 网络爬虫在大数据体系中的定位

  1. 网络爬虫的定位
    人类社会已进入大数据时代,传统的信息存储和传播媒介逐渐被计算机所替代,成为21世纪最重要的经济资源之一。商业银行面临大量信息时,如何实现内部与外部、结构性与非结构性数据的有效结合,成为关键。

  2. 网络爬虫用途
    有效的信息挖掘将数据的价值转化为经济价值,已成为商业银行提升核心竞争力的重要手段。网络爬虫技术的发展为信息的精准获取和整合提供了新策略。

🌐 网络爬虫的概念

  1. 网络爬虫的定义
    网络爬虫是指向网站发起请求,获取资源后分析并提取有用数据的程序。可以比作一只小蜘蛛,沿着互联网的“蜘蛛网”抓取数据。

  2. 技术概念
    从技术层面看,网络爬虫通过程序模拟浏览器请求网站,将返回的HTML代码、JSON数据等爬取到本地,以便后续使用。

🛠️ 网络爬虫的基本流程

  1. 基本流程
    网络爬虫的工作流程如下:

选取精心挑选的种子URL;
将这些URL放入URL队列;
从队列中取出待抓取的URL,解析DNS,下载网页并存储;
将已抓取的URL放入已抓取URL队列,分析并更新待抓取的URL。
步骤 描述
1 选取种子URL
2 放入待抓取URL队列
3 下载网页并存储
4 更新待抓取URL队列
2. 从爬虫的角度对互联网进行划分
已下载未过期网页
已下载已过期网页
待下载网页
可知网页
不可知网页
📥 网络爬虫之网页抓取的基本原理

  1. 网页抓取的定义
    网页抓取是通过多种手段收集网络数据的方式,通常是通过自动化程序请求网络服务器数据。

  2. 目标源选择
    选择目标源需根据数据相关性、易爬取程度等进行排序,尽量避免选择大型企业官网以减少反爬策略的影响。

  3. 编写爬虫
    推荐使用的库包括Requests、BeautifulSoup、Scrapy和Selenium。

  4. 数据清洗
    对获取的数据进行清洗,消除异常数据,确保数据格式统一。

📊 网络爬虫的抓取策略

  1. 抓取策略概述
    爬虫的抓取策略旨在优先选择重要网页进行抓取。常用策略包括:

宽度优先遍历策略
非完全PAGERANK策略
OCIP策略(在线页面重要性计算策略)
大站优先策略
2. 各种抓取策略描述
策略 描述
宽度优先遍历策略 按顺序抓取网页,优先下载队头网页的链接
非完全PAGERANK策略 根据PageRank得分排序待抓取网页
OCIP策略 不需要迭代计算,比PageRank计算速度快
大站优先策略 根据网站归类,优先抓取大型网站的页面
🔒 反爬虫技术及解决方案

  1. 为什么要进行反爬
    爬虫的影响:爬虫行为对服务器造成压力,可能导致崩溃。
    侵犯隐私和知识产权:爬虫可能窃取用户隐私和商业机密。
  2. 反爬技术
    验证码:用于区分人类与爬虫的请求。
    Ajax:动态网页技术,增加了爬虫的复杂性。
    数据混淆:返回错误的数据以干扰爬虫。
    User-Agent控制:通过设置请求头字段限制爬虫访问。
    反爬技术的解决办法
    随机选择User-Agent以避免被识别为爬虫。
    🐍 Python基本知识介绍
    Python编程的特点
    Python的定义
    Python是一门计算机编程语言,属于面向对象的动态类型语言,最初用于编辑自动化脚本Shell,随着版本的更新,逐渐被广泛应用于独立的大型项目开发。

Python的优势
简单易学:Python的语法简洁,初学者容易上手。
功能强大:拥有丰富的内置库和第三方库,可以高效完成各种任务。
可维护性强:代码易读性高,便于后期维护和升级。
Python的应用领域
应用领域 描述
Web开发 使用框架如Django、Flask等,Python在Web开发中展现出其强大的功能。
数据分析与处理 Python常用于数据分析,配合库如NumPy、Pandas、Matplotlib等,能够高效处理和可视化数据。
人工智能应用 Python因其简洁和强大的库支持(如TensorFlow、Scikit-learn等),广泛应用于机器学习和深度学习领域。
Web开发框架
Django
特点:开源、包含多种组件、遵循DRY原则、快速开发。
架构:遵循MVC模式,包括模型、视图、控制三个部分。
CherryPy
特点:面向对象的HTTP框架,内置Web服务器,便于直接运行应用程序。
Flask
特点:适合开发轻量级Web应用,使用Werkzeug作为服务器网关接口,Jinja2作为模板引擎。
Pyramid
特点:高效的开源框架,支持MVC架构,快速启动开发。
TurboGear
特点:集成其他框架的优秀部分,灵活扩展,支持从单文件服务扩展到全栈服务。
数据分析
数据分析的定义
数据分析是指用合适的分析方法对收集的数据进行分析,提取有用信息并得出结论。

数据分析的步骤
需求分析:确定分析方向和内容。
数据获取:通过网络爬虫或本地获取数据。
数据预处理:合并、清洗、标准化和变换数据。
分析建模:采用各类分析方法和模型,发现有价值的信息。
模型评价与优化:根据性能指标评价模型,必要时进行优化。
部署:将分析结果与结论应用于实际生产系统。
数据预处理的内容
数据合并:将多张表格合并为一张。
数据清洗:去除重复、缺失或异常的数据。
数据标准化:去除特征间的量纲差异。
数据变换:通过聚集、概化等方式转换数据。
人工智能应用
Python在人工智能中的角色
API绑定:Python作为C/C++库的接口语言,简化了跨语言开发的复杂性。
库支持:如Numpy、TensorFlow等,极大丰富了Python在人工智能方面的应用。
人工智能的特点
灵活调用:Python的调用方便,加上强大的科学计算功能,使其在AI领域具有竞争力。
Linux下Python的安装步骤
创建路径:设置Python的安装路径。
下载安装包:下载适合的Python安装包。
解压安装包:解压下载的文件。
编译安装:按照指引进行编译安装。
创建链接:便于后续调用。
测试Python3是否可用:确保安装成功。
安装setuptools:为后续安装pip做准备。
解压并安装setuptools工具:确保setuptools可用。
开始安装pip:用于管理Python包。
测试pip是否安装成功:确认pip的功能正常。
总结
Python因其简单易学、功能强大和广泛应用,成为当今编程语言中的热门选择。无论是Web开发、数据分析还是人工智能领域,Python都展现出其独特的优势。

🐍 PyCharm的安装与使用
PyCharm简介
PyCharm是一种Python集成开发环境(IDE),提供了一整套工具来提高用户使用Python进行开发的效率,包括:

调试
语法高亮
项目管理
代码跳转
智能提示
自动完成
单元测试
版本控制
此外,PyCharm还支持Django框架下的专业Web开发。

安装步骤
步骤一:下载PyCharm安装包
步骤二:移动并解压文件
将下载的安装包移动到Python文件夹中,并解压缩,同时赋予权限。

步骤三:修改hosts文件
在安装之前,需对hosts文件进行修改。

步骤四:执行安装命令
进入PyCharm的bin目录,执行sh命令开始安装。

步骤五:搭建Python解释器
搭建Python解释器以便于后续的开发工作。

步骤六:创建项目与文件
完成安装后,创建新的项目和文件以开始使用PyCharm进行Python编程。

🌐 HTML基本原理
HTML定义
HTML指的是超文本标记语言(HyperText Markup Language),它不是一种编程语言,而是一种标记语言(markup language)。

HTML标签
HTML标签是由尖括号包围的关键词,例如。
HTML标签通常成对出现,如
第一个标签为开始标签,第二个为结束标签,也称为开放标签和闭合标签。
HTML文档与网页
HTML文档描述网页,包含HTML标签和纯文本。
HTML文档也被称为网页。
HTML的基本作用
可以编辑静态网页,显示图片、文字、声音、表格和链接。
静态网页仅能用HTML编写,动态网页能够交互而非仅仅是动画。
📚 基本库的使用
urllib库
在Python 3中,urllib模块整合了以前的urllib和urllib2,目前只有一个urllib模块。

主要功能
urlparse:将URL字符串解析成各个组件。
urljoin:将根域名与新URL拼合成完整的URL。
urlopen:打开一个URL的方法,返回一个文件对象,可进行文件对象的操作。
requests库
requests库是基于urllib的更方便的HTTP库,使用起来更加简单易懂。

主要功能
使用response方法输出网页的HTML代码,相当于urllib库的response.read方法,但不需要进行解码操作。
打印cookie操作更为简单,只需使用cookie方法即可。
re库
re库用于处理正则表达式,提供多种匹配方法。

主要方法
match():从字符串头部开始匹配。
search():不需要从头部开始匹配。
findall():返回所有符合匹配规则的内容,结果为列表。
sub():用于替换匹配的字符,例如sub(‘\d+’,‘-’)将匹配的内容替换为-。
🐍 原生态爬虫的编写
📜 正则表达式介绍
正则表达式(Regular Expression)是一种用来描述、匹配一系列字符串的强大工具。它可以在多种编程语言中使用,尤其是Python中的re模块。

正则表达式的本质
正则表达式是一种微型且专业化的编程语言。
它通过规则描述所需匹配的字符串集合,例如英语句子、电子邮件地址等。
正则表达式的历史
最初由Unix中的工具(如sed和grep)普及。
许多编程语言(如Perl)都内建了强大的正则表达式引擎。
📏 正则表达式的规则简述
正则表达式用于字符串的操作,以下是Python中一些基本规则:

规则类别 描述
字符 单个字符匹配。
预定义字符集 可写在字符集[…]中。
数量词 用于指定字符或分组出现的次数。
边界匹配 匹配字符串中的位置,而不消耗字符。
逻辑分组 允许对多个表达式进行分组。
特殊构造 不作为分组的特殊匹配方式。
🛠️ Python的re库
Python的re库是字符串匹配的标准库。
调用方式: import re。
使用原生字符串
re库采用原生字符串类型(raw string),例如:r"text"。
使用普通字符串时需转义,例如:“\d”。
🕵️‍♀️ re库在爬虫中的使用
常用方法
re.search(pattern, string, flags=0)

在字符串中搜索匹配正则表达式的第一个位置,返回match对象。
pattern: 正则表达式
string: 待匹配字符串
re.match(pattern, string, flags=0)

从字符串的开始位置匹配正则表达式,返回match对象。
re.findall(pattern, string, flags=0)

返回所有匹配的子串列表。
re.split(pattern, string, maxsplit=0, flags=0)

按照正则表达式匹配结果分割字符串,返回列表。
maxsplit: 最大分割数。
re.finditer(pattern, string, flags=0)

返回一个匹配结果的迭代器,每个元素是match对象。
re.sub(pattern, repl, string, count=0, flags=0)

替换所有匹配的子串,返回替换后的字符串。
repl: 替换字符串。
🌐 Request库
安装Request
确保有pip。
使用命令安装:pip install requests。
Requests常用方法
get()方法

用于获取网页。
示例:r = requests.get(‘http://www.baidu.com’)。
post()方法

向数据库提交数据。
根据提交的数据类型处理。
request()方法

Requests库的基础方法,request.get()是其封装方法。
参数集合
参数 描述
timeout 设定超时时间,单位为秒。
params 字典或字节序列,作为参数增加到URL中。
cookies 字典或CookieJar,包含请求中的cookie。
headers 字典,HTTP定制头,用于模拟浏览器信息。
stream 是否立即下载内容,默认为True。
auth 支持HTTP认证功能的元组。
verify 认证SSL证书的开关,默认为True。
allow_redirects 重定向开关,默认为True。
📥 带参数的get()请求
python
Copy
response = requests.get(“http://httpbin.org/get?name=germey&age=22”)
print(response.text)
下载图片
获取图片的URL。
使用requests.get()方法下载,并使用response.content打印出图片内容。
📊 解析JSON
JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式。
它独立于语言,具有自我描述性,更易于理解。
🔐 会话维持与Cookies
会话维持
确保在负载均衡时相关请求分配到同一台机器。
获取Cookies
Cookies由Web服务器嵌入到用户浏览器中,以便识别用户,下次请求时会发送Cookies。
⏳ 超时设置与异常处理
使用timeout参数设置请求超时时间。
处理常见异常,例如ConnectionError、HTTPError等。
📊 Excel表格读取
技术要求
利用Selenium和Python获取网页并操作到成绩单页面。
使用xlwt模块将表格保存到本地。
方法步骤
打开PyCharm,新建py文件。
导入xlrd包,读取表格。
指定要读取的Excel表格。
根据sheet索引获取内容。
读取行或列的值。
读取单元格内容的三种方法。
🌐 HTML内容解析

  1. XPath的介绍与使用
    1.1 XPath简介
    XPath是XML路径语言,用于确定XML文档中某部分位置的语言。它可以在XML文档中遍历元素和属性,是W3C XSLT标准的主要元素。

1.2 XPath路径表达式
XPath使用路径表达式来选取XML文档中的节点,这些表达式与常规电脑文件系统中的表达式相似。

1.3 XPath标准函数
XPath包含超过100个内建函数,适用于字符串、数值、日期和时间比较、节点处理等。

1.4 XPath在XSLT中的使用
XPath是XSLT标准中的核心元素,没有XPath知识无法创建XSLT文档。XQuery和XPointer均构建于XPath表达式之上。

1.5 XPath的使用
5.1 安装lxml库
在Ubuntu16.04终端下输入命令:
pip install lxml

5.2 导入

python
Copy
from lxml import etree
5.3 基本使用
通过etree.tostring(html)打印HTML内容,并补全缺少的标签。

1.6 XPath的节点
XPath中有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释和文档节点。

1.7 节点关系
父节点:每个元素和属性都有一个父节点。
子节点:元素节点可有零个或多个子节点。
同胞节点:拥有相同父节点的节点。
先辈节点:某节点的父、父的父等。
后代节点:某个节点的子节点、子节点的子节点等。
2. lxml的安装与使用
2.1 lxml概念
lxml是处理XML的第三方Python库,封装了用C语言编写的libxml2和libxslt,提供强大的Python API。

2.2 lxml安装
在终端命令行中执行:
pip install lxml,提示“Requirement already satisfied”即为安装成功。

2.3 基本使用方法
lxml是一个HTML/XML解析器,能够自动修正HTML代码。

2.4 读取文件
支持从文件读取内容,使用parse方法读取文件。

2.5 lxml.etree
操作XML时,需要将字符串或流读入解析成ElementTree,并可将ElementTree转换为字符串。

2.6 Element类
Element类是ElementTree API中的主要容器对象,通过Element工厂创建。
通过对象的属性访问XML标记名。
使用append方法增加子Element。
2.7 利用etree库读取网页源代码
创建本地HTML文件用于测试,并使用etree库读取网页文件源代码。

  1. Chrome浏览器分析网站
    3.1 网页
    网页是构成网站的基本元素,包含HTML标签,能通过浏览器阅读。

3.2 静态与动态网页
静态网页:无后台数据库的不可交互网页,后缀如.htm、.html等。
动态网页:能与后台数据库交互的可交互网页,后缀如.aspx、.jsp等。
3.3 如何使用Chrome分析目标网站
使用Chrome开发者工具分析目标网站,通过快捷键Ctrl+Shift+I或F12打开开发者工具。

3.4 网页抓包分析
使用Network选项卡抓包,按F5刷新页面。
选中Doc查看浏览器发送的请求,Header显示参数设置,Response显示源代码。
4. BeautifulSoup的安装与使用
4.1 BeautifulSoup简介
Beautiful Soup是Python的HTML/XML解析器,能够处理不规范标记并生成解析树。

4.2 BeautifulSoup安装步骤
在Windows平台下,输入命令:
pip install beautifulsoup4或pip install bs4。

4.3 BeautifulSoup库的理解
HTML文件由尖括号构成的标签组织,Beautiful Soup库用于解析、遍历和维护标签树。

4.4 BeautifulSoup的使用
使用BeautifulSoup类构造文档对象,支持字符串或文件句柄。

4.5 BeautifulSoup库的解析器
BeautifulSoup4是HTML/XML解析器,支持CSS选择器,内存开销较大,性能较低。

4.6 BeautifulSoup类的基本元素
Tag:与HTML/XML文档中的尖括号相对应。
Name:使用点方式获得标签名字。
Attributes:标签的属性,以字典形式组织。
NavigableString:标签之间的字符串内容。
Comment:HTML中的注释形式。
4.7 BeautifulSoup类的四大对象种类
Tag
NavigableString
BeautifulSoup
Comment
🖥️ 页面请求与JSON

  1. 简单的页面请求
    什么是页面请求
    页面请求是互联网技术术语,指从网页客户端发送到网页服务器的页面请求指令。可以从三个方面理解页面请求过程:

浏览器:作为客户端,发送请求。
服务器:接收请求并处理。
协议:浏览器和服务器之间通信的协议。
Web的概念
Web:即网页,是一种基于B/S架构(浏览器/服务器)的应用软件,分为前端(用户接口)和后端(业务逻辑和数据)。
前端:通过浏览器实现用户交互。
后端:由网页服务器处理业务逻辑和数据。
Web请求响应的过程
客户端发送请求:浏览器向服务器发送请求URL。
服务器接收请求:服务器接收到请求。
服务器生成HTML:解析请求的URL,组织数据生成HTML页面。
服务端响应请求:将生成的HTML文档发送给客户端浏览器。
客户端接收响应:浏览器接收HTML文档。
客户端解析HTML:加载相关的资源文件(如JS、CSS等)。
服务器发送资源文件:将相关资源文件响应给客户端。
客户端加载资源文件:整理并呈现到页面中。
客户端从上到下加载:浏览器从上到下执行HTML文档,并解析相关脚本。
2. JSON的介绍与应用
JSON简介
JSON(JavaScript Object Notation,JS 对象简谱)是一种轻量级的数据交换格式,基于ECMAScript的一个子集,采用独立于编程语言的文本格式存储和表示数据。其特点为:

简洁清晰的层次结构。
易于人阅读和编写。
机器解析和生成简单。
JSON基本语法
在JS中,一切都是对象,支持的类型包括字符串、数字、对象、数组等。
对象表示为键值对,数据由逗号分隔,使用花括号{}保存。
数组使用方括号[]保存,元素用逗号分隔。
JSON数据解析
JSONObject:当数据是{}时使用。
JSONArray:当数据是[]时使用。
3. GET请求与POST请求
HTTP简介
HTTP(超文本传输协议)是保证客户机与服务器之间通信的协议,工作方式为请求-应答协议。基本请求方式包括:

GET请求:从指定资源请求数据。
POST请求:向指定资源提交数据。
GET与POST请求的区别
GET提交:
数据附在URL之后,以?分割URL和数据,多个参数用&连接。
例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。
POST提交:
数据放在HTTP包的包体中,地址栏不会改变。
伪造请求头
请求头包含请求的信息,描述请求的基本信息。
伪造请求头可以利用Python代码将爬虫请求伪造成正常的浏览器请求。
4. Selenium的介绍与安装
Selenium简介
Selenium 是一系列基于Web的自动化工具,用于支持Web自动化测试。

多浏览器支持:IE、Firefox、Safari、Chrome等。
支持多种语言:Java、C#、Python等。
解决JavaScript渲染问题。
Selenium的安装
在Linux环境下通过终端安装Selenium:

bash
Copy
pip install selenium
用Selenium进行模拟点击
通过Selenium模拟浏览器操作,例如爬取酷狗top500的mp3。
5. Ajax结果提取
什么是Ajax
AJAX(Asynchronous Javascript And XML)是一种用于创建快速动态网页的技术,能在后台与服务器进行少量数据交换,实现网页的异步更新。

Ajax获取JSON文件提取数据
JSON:一种存储和交换文本信息的语法,比XML更小、更快、更易解析。
分析请求与响应
以微博为例,通过Ajax的XHR过滤器观察请求,分析参数信息和响应内容。
结果分析
从响应中提取重要字段如mblog,包含微博信息(如赞数、评论数、发布时间等),可通过循环获取所有微博。
🖥️ 模拟登陆与验证
复杂的页面请求

  1. 什么是复杂的页面请求
    在爬虫开发的过程中,有些数据的采集相对较复杂,特别是需要账号与密码的网站,往往需要通过验证后才能展示信息,典型的如知乎。

主要问题
如何模拟人的操作,登陆到网页中,即爬虫的模拟登陆。
登陆过程中遇到验证码,即爬虫的验证码识别。
2. 复杂的页面请求的解决方法
在Python中提供了一些库与方法:
爬虫的模拟登陆:Cookie方法、Selenium方法
爬虫的验证码识别:图像识别技术、自动打码OCR技术
模拟登陆:Cookie

  1. 什么是Cookie
    Cookie是由服务器发给客户端的特殊信息,以文本文件的方式存放在客户端,每次向服务器发送请求时都会带上这些特殊的信息。

作用
解决如何记录客户端的用户信息。当用户访问网页时,其名字可以记录在Cookie中,下一次访问时可以读取。
2. Cookie的用法
要素 描述
键值对 Cookie以名/值对形式存储,例如:username=John Doe
过期时间 Cookie是有过期时间的,通过expires字段表示,例如:Set-Cookie:myname=myvalue; expires=Mon, 22-Jan-07 07:10:24 GMT
域 由于同源策略,脚本只能访问父域名或本域名的Cookie
路径 Cookie是分路径的,同一域名下的不同路径无法共享Cookie
secure 只有在安全协议(如https、ssl)时,浏览器才会传输Cookie
httponly 只用于传输,脚本不可访问,如jessionid设置为httponly后,js脚本无法获取
3. Cookie在爬虫模拟登陆过程中的使用
首先需要手动在浏览器中进行登录操作,填写用户名、密码等信息。
登录完成后,通过浏览器检查网站数据的请求,找到Cookie。
获取到Cookie值后,在使用requests库的get方法发送请求时,可以将Cookie一起发送至服务器端,模拟登陆。
模拟登陆:Selenium

  1. 什么是Selenium
    Selenium是一个Web的自动化测试工具,可以按指定的命令自动操作网站。

特点
直接运行在浏览器上,支持所有主流浏览器。
可根据程序指令,让浏览器自动加载页面、获取数据。
2. Selenium的安装
2.1 安装Selenium
在终端中输入命令:pip install selenium即可完成安装。
2.2 下载浏览器驱动
不同浏览器的驱动是不同的:
Firefox浏览器:geckdriver
Chrome浏览器:chromedriver
IE浏览器:IEdriver
2.3 安装浏览器驱动geckodriver
下载地址:geckodriver releases
解压后,将geckodriver.exe放在与python3.exe相同的路径下。
3. 使用Selenium模拟登陆
导入Selenium库,并指定浏览器驱动的位置。
通过网页分析,找到“用户名”与“密码”对应的位置,自动填写。
找到“登陆”按钮,使用click()或submit()方法进行操作。
验证码的识别

  1. 验证码
    为了反爬虫,许多网站会采取验证码措施,当检测到访问频率过高时,会弹出验证码以确认访问者不是机器人。

类型
输入式验证码
滑动式验证码
点击式图文验证或图标选择
宫格验证码
2. 验证码识别思路
2.1 输入式验证码
使用OCR(光学字符识别)方法进行识别,例如使用Python中的tesserocr库。
2.2 滑动式验证码
通过图片对比方法确定缺口位置,使用Selenium库自动将按钮滑动到缺口位置。
2.3 点击式的图文验证
借助第三方识别接口来识别出相同的内容。
2.4 宫格验证码
列举所有可能,生成图片库,匹配当前验证码与图片库,找到最匹配的拖动方法。
3. 验证码识别实例——Tesseract-OCR
3.1 Tesseract简介
Tesseract是一个由谷歌赞助的OCR库,公认最优秀的开源OCR库,具有高识别度和灵活性。
3.2 Pytesseract的使用
引入库pytesseract,生成图片实例,调用pytesseract进行识别并打印。
🐍 Python与数据库
MySQL数据库的安装与应用
1、什么是MySQL数据库
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

2、MySQL数据库的特点
特点 描述
开源 MySQL 是开源的,所以你不需要支付额外的费用。
大型支持 MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
标准SQL支持 MySQL 使用标准的 SQL 数据语言形式。
多系统支持 MySQL 可以运行于多个系统上,并且支持多种语言。
PHP支持 MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
可定制性 MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
3、关系型数据库
MySQL 为关系型数据库(Relational Database Management System),这种所谓的"关系型"可以理解为"表格"的概念,一个关系型数据库由一个或数个表格组成。

表格结构
术语 描述
表头(header) 每一列的名称;
列(col) 具有相同数据类型的数据的集合;
行(row) 每一行用来描述某条记录的具体信息;
值(value) 行的具体信息, 每个值必须与该列的数据类型相同;
键(key) 键的值在当前列中具有唯一性。
4、MySQL 安装
Linux的MySQL下载地址为:MySQL 下载。
挑选你需要的MySQL Community Server版本及对应的平台。
注意:安装过程需要通过开启管理员权限来安装,否则会由于权限不足导致无法安装。
5、Linux上安装 MySQL
在终端中输入命令:apt-get install mysql-server 即可开始安装。
安装过程中会提示设置MySQL root用户的密码,设置完成后等待自动安装即可。
6、测试MySQL
打开Linux系统上的终端命令行,输入:mysql -u root -p。
7、启动 MySQL 数据库
以root身份打开终端命令行工具,输入命令:service mysql start 启动。
8、登录 MySQL 数据库
当MySQL服务已经运行时,可以通过MySQL自带的客户端工具登录到MySQL数据库中,首先打开命令提示符,输入以下格式的命令:
text
Copy
mysql -h localhost -u root -p
按回车确认后,输入密码登录。
9、Linux系统下启动及关闭 MySQL 服务器
启动MySQL服务的两种方式:
命令行方式
服务方式
关闭MySQL服务的两种方式:
命令行方式
服务方式
10、MySQL 数据库的使用
10.1 使用 mysqladmin 创建数据库
使用普通用户可能需要特定的权限来创建或删除MySQL数据库,通常使用root用户登录。
示例命令:
text
Copy
mysqladmin -u root -p create RUNOOB
成功执行后会创建名为RUNOOB的数据库。
10.2 MySQL删除数据库
删除数据库的命令为:
text
Copy
DROP DATABASE RUNOOB;
10.3 MySQL创建数据库
在登录 MySQL 服务后,使用以下语法创建数据库:
text
Copy
CREATE DATABASE RUNOOB;
MongoDB的安装与使用
1、什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,类似于 JSON 对象。

2、Linux平台安装 MongoDB
2.1 MongoDB 下载
MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,可以从MongoDB官网下载安装。
也可以在linux中的终端输入:
text
Copy
sudo apt-get install -y mongodb-org
2.2 MongoDB版本
在终端中输入:mongo -version 查看版本信息。
3、Linux平台删除 MongoDB 数据库和日志文件
删除日志的命令:
text
Copy
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
4、MongoDB可视化工具
4.1、RockMongo
RockMongo 是一个MongoDB管理工具,类似于 phpMyAdmin,可以管理 MongoDB服务、数据库、集合、文档等。

4.2 RockMongo特征
特征 描述
许可证 使用宽松的New BSD License协议
速度快 安装简单
多语言支持 提供中文、英文等多种语言支持
安全性 需要管理员密码才能登入操作,确保数据库的安全性
Python库PyMongo
1、PyMongo的安装
PyMongo 是Python中用来操作MongoDB的一个库。MongoDB的文件存储格式类似于JSON,称为BSON。

2、pip 安装
使用命令安装PyMongo:
text
Copy
pip install pymongo
指定安装版本的命令:
text
Copy
pip install pymongo==x.x.x
3、easy_install 安装
旧版的 Python 可以使用 easy_install 来安装:
text
Copy
easy_install pymongo
4、测试 PyMongo
创建测试文件 demo_test_mongodb.py,并执行代码:
python
Copy
from pymongo import MongoClient
client = MongoClient(‘localhost’, 27017)
数据库的连接
1、Python与MySQL的连接
使用MySQL二进制方式进入到mysql命令提示符,连接MySQL数据库的示例命令:
text
Copy
mysql -u root -p
2、Python与MongoDB的连接
使用MongoDB的连接命令:
python
Copy
from pymongo import MongoClient
client = MongoClient(‘localhost’, 27017)
🕷️ Python爬虫的常见框架
初识爬虫框架
Python爬虫的常见框架
在本节中,我们将讨论几种常见的Python爬虫框架,包括它们的特点和适用场景。

爬虫框架的简单对比
名称 是否支持分布式 可扩展性 适用性 上手难易度 是否支持JS页面抓取
WebCollector 否(包含单机版和分布式版两个版本) 强 精抽取业务 简单 支持
Nutch 是 中 搜索引擎定制的爬虫 难 不支持
WebMagic 否(Redis进行分布式管理) 强 精抽取业务 简单 不支持
Heritrix 否 强 精抽取业务 简单 不支持
Scrapy 扩展可支持 强 中间件机制 简单 不支持
PySpider 支持 强 适用页面监控与更新 简单 支持
对于爬虫框架本身来说,都是很优秀的,选择哪个更好,不如说哪个更适合公司的业务需求。例如,在JavaWeb项目中需要定期抓取某些网站的金融系列新闻,可以考虑WebMagic框架,它能够将爬虫代码逻辑模块化到项目中,毫无违和感。

WebCollector的简单介绍
WebCollector特点
WebCollector是一个无须配置、便于二次开发的Java爬虫框架,它提供精简的API,只需少量代码即可实现功能强大的爬虫。
WebCollector-Hadoop是WebCollector的Hadoop版本,支持分布式爬取。
WebCollector与传统网络爬虫的区别
传统的网络爬虫倾向于整站下载,而WebCollector可以通过设置爬取策略进行定向采集,抽取网页中的结构化信息。

WebCollector与HttpClient、Jsoup的区别
WebCollector:爬虫框架,具备多线程和URL维护功能。
HttpClient:Http请求组件,单线程速度慢。
Jsoup:网页解析器,内置Http请求功能。
WebCollector的量级处理能力
单机版:能够处理千万级别的URL,适合大部分精数据采集任务。
Hadoop版:处理的量级高于单机版,具体数量取决于集群的规模。
WebCollector的遍历机制
WebCollector采用粗略的广度遍历方式,用户无需关注遍历的具体方式,支持自动解析和手动解析新URL。

Nutch的简单介绍
Nutch的特点
Nutch是一个开源Java实现的搜索引擎,提供运行搜索引擎所需的全部工具,包括全文搜索和Web爬虫。
它致力于让用户轻松配置世界一流的Web搜索引擎。
Nutch结构组成
Crawler:用于抓取网页并建立索引。
Searcher:利用索引检索用户的查找关键词。
Nutch的操作流程
创建新的WebDb。
将起始URLs写入WebDB。
根据WebDB生成fetchlist并写入相应的segment。
根据fetchlist中的URL抓取网页。
更新WebDb。
循环进行抓取直至预设深度。
更新segments。
对抓取网页进行索引。
丢弃重复内容的网页和URLs。
合并生成最终索引。
WebMagic的简单介绍
WebMagic特点
WebMagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,支持多线程抓取和分布式抓取。
支持自动重试、自定义用户代理(UA)和Cookie等功能。
Heritrix的简单介绍
Heritrix的特点
Heritrix是专门为网页存档而开发的网页检索器,使用Java编写并完全开源。
提供用户界面控制检索器的行为,并有命令行工具供选择调用。
Heritrix的主要部件
Heritrix主要有三大部件,具体内容将在后续讲解中说明。

🕸️ Pyspider爬虫框架简介

  1. PySpider简介
    “Pyspider是由国人Binux编写的强大的网络爬虫系统,它带有强大的WebUI、脚本编辑器、任务监控器、项目管理以及结果处理器,它支持多种数据库后端、多种消息队列、JavaScript渲染页面的爬取。使用起来非常方便。”

  2. PySpider基本功能
    功能 描述
    WebUI系统 提供可视化编写和调试爬虫的界面
    爬取进度监控 监控爬取进度和查看爬取结果
    项目管理功能 管理多个爬虫项目
    数据库支持 支持多种后端数据库,如MySQL、MongoDB等
    消息队列支持 支持RabbitMQ、Beanstalk等消息队列
    优先级控制 提供任务的优先级控制和失败重试功能
    JavaScript渲染支持 对接PhantomJS,抓取JavaScript渲染的页面
    部署方式 支持单机和分布式部署、支持Docker部署

  3. PySpider的架构
    “Pyspider的架构主要分为Scheduler(调度器)、Fetcher(抓取器)、Processer(处理器)三个部分。整个爬取过程受到Monitor(监控器)的监控,抓取的结果被Result Worker(结果处理器)处理。”

任务执行流程
步骤 描述
1 每个PySpider项目对应一个Python脚本,定义一个Handler类,调用on_start方法生成初始抓取任务。
2 Scheduler将任务分发给Fetcher进行抓取,Fetcher获取响应并发送给Processer。
3 Processer处理响应,提取新URL生成新抓取任务,通过消息队列通知Scheduler并发送提取结果。
4 Scheduler查询数据库,调度新的抓取任务,重复以上步骤直到所有任务执行完毕。
5 抓取结束后,程序回调on_finished方法定义后处理过程。
4. PySpider模块介绍
“各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor都是可以多实例分布式部署的。”

组件 职责
Scheduler 任务调度控制
Fetcher 抓取网页内容
Processor 解析网页内容,生成新抓取任务
Result Worker 处理抓取结果
5. PySpider的特点
Python脚本控制:支持使用任何HTML解析包(内置pyquery)。
Web界面:可视化编写调试脚本,监控执行状态,查看活动历史。
数据存储:支持MySQL、MongoDB、SQLite等。
队列服务:支持RabbitMQ、Beanstalk等。
JavaScript抓取:支持JavaScript渲染页面的抓取。
模块化设计:支持单机/分布式部署。
调度控制:支持超时重爬及优先级设置。
兼容性:支持Python 2和3。
6. PySpider的安装
在终端命令行中执行:sudo apt-get update 更新源。
确保pip更新:sudo pip3 install --upgrade pip。
安装相应的包。
如果出现 no module named xmlrpc_server 错误,执行:pip install -U six 进行修复。
7. PySpider的使用流程
使用pyspider all命令启动所有组件。
在浏览器输入localhost:5000进入控制台页面。
在Web控制台点击create按钮新建任务,项目名自定义。
点击进入创建的项目,查看相关函数。
🕸️ Pyspider与Scrapy的区别

  1. Pyspider与Scrapy的优缺点
    特性 Pyspider Scrapy
    脚本控制 支持Python脚本控制 封装了Twisted,结构清晰
    Web界面 提供WebUI界面 采用命令行操作
    JavaScript支持 支持JavaScript页面抓取 需要额外配置Scrapy-Splash
    去重支持 一般 支持千万级URL去重,采用布隆过滤
    自定义程度 相对较低 高,适合学习研究
    社区支持 较少 社区人数和文档较强

  2. 为什么要使用Pyspider?
    提供WebUI界面,调试爬虫方便。
    方便进行爬取流程监控和项目管理。
    支持常见数据库。
    使用PhantomJS抓取JavaScript页面。
    支持优先级定制和定时爬取功能。
    🕷️ Pyspider爬虫框架的使用
    📊 Pyspider的界面介绍

  3. Pyspider框架
    功能:强大的网络爬虫系统,带有强大的WebUI、脚本编辑器、任务监控器、项目管理及结果处理器,支持多种数据库后端、多种消息队列及JavaScript渲染页面的爬取,使用非常方便。

  4. 首页介绍
    下图为Pyspider爬虫框架的主控制台:

  5. 操作按钮
    运行状态:直接在每个项目的运行状态上点击鼠标左键进行修改。五种状态介绍:
    TODO:新建项目后的默认状态,不会运行项目。
    STOP:停止状态,也不会运行。
    CHECKING:修改项目代码后自动变为该状态。
    DEBUG:调试模式,遇到错误信息会停止继续运行。
    RUNNING:运行状态,遇到错误会自动尝试,如果仍有错误则跳过错误的任务继续运行。
    状态 描述
    TODO 默认状态,不运行项目
    STOP 停止状态,不运行
    CHECKING 修改后自动变为该状态
    DEBUG 调试模式,遇到错误停止运行
    RUNNING 运行状态,遇到错误继续尝试
    其他操作:
    rate/burst:rate指每秒执行请求数,burst为任务并发数。
    avg time:任务的平均时间。
    progress:记录任务状态,包括创建数、成功数、失败数等。
    Active Tasks:查看当前爬虫项目的活动任务。
    Results:查看活动任务的结果。

  6. 编辑页面介绍
    左侧页面栏:显示调试信息。

Run:调试按钮,点击运行当前任务。
web:展示当前拉取到的页面内容。
html:显示当前页面的html源码。
follow:子任务管理。
右侧页面:用于编写爬虫脚本,默认脚本如下。

  1. Pyspider框架主控制台介绍
    控制台默认地址:127.0.0.1:5000。
    队列统计:方便查看爬虫状态,优化爬取速度。
    组名:项目新建后一般不能修改,需特殊标记可修改组名。
    🧵 Pyspider的多线程爬虫

  2. 什么是多线程
    一个进程中可以开启多个线程,多个线程可以同时执行不同的任务,从而提高程序的执行效率。

  3. 多线程的原理
    对于单核CPU来说,CPU在同一时间只能处理一个线程,但通过快速切换实现多线程的“同时”执行。

  4. 多线程的优点和缺点
    优点 缺点
    提高程序的执行效率 开启线程需要占用内存空间
    提高资源的利用率(CPU、内存) 线程越多,CPU开销越大
    任务完成后线程自动销毁 程序设计更加复杂,需考虑线程间通信和数据共享

  5. 创建多线程
    方法:
    通过Thread方法构建一个线程。
    通过继承Thread类并重写run()方法构建。
    python
    Copy
    Thread(group=None, target=None, name=None, args=(), kwargs={})
    参数说明:
    group:线程组,通常不使用。
    target:线程执行的方法。
    name:线程名称。
    args/kwargs:传给方法的参数。

  6. 使用类创建多线程
    自定义类需继承threading.Thread,并重写run方法。

  7. 多线程的常用函数
    多线程运行中可能会遇到问题,常用的方法包括:

start():启动线程。
join():等待线程完成。
⏱️ Pyspider爬虫时间控制

  1. 反爬虫问题
    在进行爬虫时,可能会遇到IP和访问时间间隔的限制。需要根据具体问题调整爬虫策略。

  2. 处理方法
    利用代理IP:使用付费代理IP提高稳定性和效率。

调用time.sleep():在爬虫过程中适当延时,降低访问速度以防止被封。

设置随机访问时间间隔:

python
Copy
import time
import random
time.sleep(random.random() * 3)
3. 时间格式转换
使用datetime.datetime.strptime(date_string, format)进行时间格式匹配,并使用strftime(format)输出想要的格式。

格式符号 描述
%y 两位数年份(00-99)
%Y 四位数年份(0000-9999)
%m 月份(01-12)
%d 日(01-31)
%H 24小时制小时数(00-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
📦 RabbitMQ队列去重

  1. 什么是消息队列
    消息队列是一种应用间的通信方式,确保消息的可靠传递。发布者将消息发送到队列,消费者从队列中获取消息。

  2. RabbitMQ队列
    RabbitMQ是开源的AMQP实现,用于分布式系统中的消息存储和转发。

  3. RabbitMQ的工作模式
    工作模式 描述
    简单模式 生产者将消息放入队列,消费者获得消息。
    RPC模式 用于远程调用场景,一个应用程序调用另一个应用程序。
    交换机模式 消息需要配置交换机参数以转发。
    routing模式 检查队列的routing key值,进行消息转发。
    主题转发模式 配置为topic类型的交换机,支持模糊匹配routing key。
    工作队列模式 通过消息队列实现负载均衡,避免立即执行资源密集型任务。
    🕷️ Scrapy爬虫框架的使用
    🐍 Scrapy简介与安装

  4. Scrapy简介
    Scrapy 是用 Python 实现的一个框架,专门用于爬取网站数据并提取结构性数据。它广泛应用于数据挖掘、信息处理和历史数据存储等场景。通过 Scrapy 框架,用户可以轻松实现爬虫,抓取指定网站的内容或图片。

  5. 安装
    Linux安装方式
    已安装 Python 3.x 版本:
    首先,安装 Scrapy 的依赖项,执行如下命令:
    获取系统的 root 权限后安装 Scrapy。
    如果出现错误信息,要求升级 pip3,使用以下命令:
    text
    Copy
    pip3 install --upgrade pip
    Windows安装方式
    已安装 Python 3.7 版本:
    安装必要的软件包:
    pip install wheel
    pip install lxml
    pip install PyOpenssl
    安装 Microsoft Visual C++ Build Tools,处理可能出现的问题。
    使用以下命令安装 Scrapy:
    text
    Copy
    pip install Scrapy
    🗂️ Scrapy的项目文件介绍

  6. Linux终端创建Scrapy框架
    在指定目录打开终端并输入:
    text
    Copy
    scrapy startproject todayMove
    使用 tree 命令查看文件目录结构,若未安装可以使用:
    text
    Copy
    apt-get install tree

  7. Windows创建项目
    在项目目录中运行以下命令创建 Scrapy 项目:
    text
    Copy
    scrapy startproject first_spider
    该命令将创建包含配置文件和文件夹的项目。

  8. 项目文件结构
    文件/文件夹名称 作用
    scrapy.cfg Scrapy项目的配置文件
    first_spider 包含项目代码的文件夹
    spiders 存放爬虫脚本的目录
    🔄 Scrapy的使用

  9. Ubuntu定时任务配置
    书写shell脚本:

text
Copy
#!/bin/sh
cd /home/x5456/SinaSpider
/home/x5456/.local/bin/scrapy crawl sina
编辑定时任务: 使用 crontab -e 命令,设置每天执行脚本:

text
Copy
41 16 * * * /home/x5456/SinaSpider/sinastart.sh
2. 新建项目
在项目目录中运行以下命令创建新 Scrapy 项目:
text
Copy
scrapy startproject mySpider
3. 明确目标
在 mySpider/items.py 中定义要抓取的数据结构,如讲师姓名、职称和个人信息。
4. 制作爬虫
使用以下命令在 mySpider/spider 目录下创建爬虫:
text
Copy
scrapy genspider itcast jycinema.com
5. 编码注意事项
Python 2.x 默认编码为 ASCII,需在代码顶部添加以下行以避免乱码:
python
Copy

-- coding: utf-8 --

📦 Scrapy与Redis

  1. Scrapy-Redis分布式策略
    可以通过不同操作系统的电脑设置 Master 和 Slaver 端,Master 不负责爬取,但负责 URL 的判重和数据存储。
  2. Windows下安装Redis
    下载地址:https://github.com/MSOpenTech/redis/releases
    解压并重命名文件夹为 redis,使用 cd 命令切换到目录。
  3. Redis命令
    设置键值对和取出键值对的命令如下:
    text
    Copy
    SET key value
    GET key
  4. Scrapy-Redis使用
    修改 settings.py 和 spiders.py 文件以适应 Scrapy-Redis 的使用。
  5. Redis数据库管理
    使用 Redis 的桌面管理工具进行数据管理。
  6. Redis Script Exists 命令
    用于校验指定脚本是否已保存在缓存中,返回值为列表,包含存在与否的信息。
  7. Scrapy-Redis实例
    修改爬虫继承类为 RedisSpider,并设置 redis_key 以实现自动爬取。
    通过上述内容,可以了解 Scrapy 框架的基本使用方法、项目结构及如何与 Redis 结合使用。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值