实战:总结知识点疫情爬虫

  • Re正则表达式
  • Re库的使用
  • scrapy爬虫框架介绍
  • Scrapy常用命令
  • 网络爬虫



技术亮点:


1、采用requests发送请求,获取响应


2、采用BeautifulSoup4解析页面数据


3、采用正则表达式 提取不规则字符串


4、采用json模块处理json格式数据


5、采用 类封装爬虫项目代码


6、对爬虫项目代码进行重构,提高代码扩展性和复用性

网络爬虫的概念
1、网络爬虫和浏览器的区别:浏览器是展示数据的,而网络爬虫是采集数据的
2、定义:模拟客户端发送请求获取响应数据,按照一定规则,自动从万维网上获取信息的程序
3、作用:从万维网上,获取我们需要的信息

requests使用三步骤:
1、导入模块
2、发送get请求,获取响应
3、从响应中获取数据

response常见属性:
response.text:响应str类型
response.encoding:二进制转换字符使用的编码
response.content:响应体bytes类型

BeautifulSoup对象介绍与创建
BeautifulSoup介绍:
BeautifulSoup是一个可以从HTML或xml文件中提取数据的python库

BeautifulSoup安装:
安装:pip install bs4
安装lxml:pip install lxml

BeautifulSoup对象:代表要解析珍格格文档树,它支持遍历文档树和搜索文档树中描述的大部分的方法。

BeautifulSoup对象的find方法
find方法的作用:搜索文档树
find(self,name=None,attrs=[],recursive=True,text=None,**kwargs)
参数:
name:标签名
attrs:属性字典
recursive:是否递归循环查找
text:根据文本内容查找
返回:
查找到第一个元素对象

Tag对象介绍:Tag对象对应于原始文档中的xml或HTML标签。Tag有很多方法和属性,可用遍历文档树和搜索文档树以及获取标签内容。

Tag对象常见属性:
name:获取标签名称
attrs:获取标签所有属性的键和值
text:获取标签的文本字符串

正则表达式的概念和作用
概念:正则表达式是一种字符串匹配的模式

作用:
检查一个字符串是否含有某种子串;
替换匹配的子串;
提取某个字符串中匹配的子串

re.findall()方法
API
re.findall(pattern,string,flags=0)[重点]
作用:扫描整个string字符串,返回所有与pattern匹配的列表
参数:
pattern:正则表达式
string:要查找的字符串
flags:匹配模式
返回:返回string中与pattern匹配的结果列表
findall()特点:(切记)
如果正则表达式中没有()则返回与整个正则匹配的列表;
如果正则表达式中有(),则返回()中匹配的内容列表,小括号两边的东西都是负责确定提取数据所在位置。

json模块介绍
json模块是python自带的模块,用于json与python数据之间的相互转换;

笔记总结:中国大学MOOC
python网络信息爬虫与信息提取
1、Requests:自动爬取HTML页面,自动网络请求提交
2、BeautifulSoup:解析页面
3、Re:正则表达式详解,提取页面关键信息

Re正则表达式

正则表达式
(1)通用的字符串表达框架
(2)简洁表达一组字符串的表达式
(3)针对字符串表达“简洁”和“特征”思想的工具
(4)判断某字符串的特征归属

正则表达式在文本处理中十分常用
(1)表达文本类型的特征(病毒、入侵等)
(2)同时查找或替换一组字符串
(3)匹配字符串的全部或部分

正则表达式的使用
编译:将符合正则表达式语法的字符串转换成正则表达式特征

正则表达式的语法:正则表达式语法由字符和操作符构成

正则表达式的常用操作符

操作符

说明

实例

.

表示任何单个字符

[ ]

字符集,对单个字符给出取值范围

[abc]表示a、b、c,[a-z]表示a到z单个字符

[^ ]

非字符集,对单个字符给出排除范围

[^abc]表示非a或b或c的单个字符

*

前一个字符0次或无限次扩展

+

前一个字符1次或无限次扩展


前一个字符0次或1次扩展

或(无法用字符表示出来)

左右表达式任意一个

{m}

扩展前一个字符m次

ab{2)c表示abbc

{m,n}

扩展前一个字符m至n次 (含n)

ab{1,2}c表示abc/abbc

^

匹配字符串开头

^abc表示abc且在一个字符串的开头

$

匹配字符串结尾

abc$表示abc且在一个字符串的结尾

()

分组标记,内部只能使用“或”操作符

python提取专利信息 python 信息提取_python

\d

数字,等价于[0-9]

\w

单词字符,等价于[A-Za-z0-9_]

Re库的使用

Re库是python的标准库,主要用于字符串匹配
调用方式:import Re

正则表达式的表示类型
raw string类型(原生字符串类型)
re库采用raw string类型表示正则表达式,表示为r’text’
例如:r’[1-9]\d{5} ’
raw string 是不包含转义符的字符串
String类型 ,更繁琐
当正则表达式包含转义符时,使用raw string(原生字符串)

Re库主要功能函数

函数

说明

re.search()

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

re.match()

从一个字符串的开始位置起匹配正则表达式,返回match对象

re.findall()

搜索字符串,以列表类型返回全部能匹配的子串

re.split()

将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

re.finditer()

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

re.sub()

在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

regex = re.compile(pattern, flags=0)
将正则表达式的字符串形式编译成正则表达式对象
pattern:正则表达式的字符串或原生字符串表示
flags:正则表达式使用时的控制标记
regex = re.compile(r’[1-9]\d{5}')

Re库的match对象:一次匹配的结果

属性

说明

.string

待匹配的文本

.re

匹配时使用的pattern对象(正则表达式)

.pos

正则表达式搜索文本的开始位置

.endpos

正则表达式搜索文本的结束位置

方法

说明

.group()

获得匹配后的字符串

.start()

匹配字符串在原始字符串的开始位置

.end()

匹配字符串在原始字符串的结束位置

.span()

返回(.start(),.end())

Re库的贪婪匹配和最小匹配
贪婪匹配:Re库默认采用贪婪匹配,即输出匹配最长的子串。

最小匹配

操作符

说明

*?

前一个字符0次或无限次扩展,最小匹配

+?

前一个字符1次或无限次扩展,最小匹配

??

前一个字符0次或1次扩展,最小匹配

{m,n}?

前一个字符m至n次(含n),最小匹配

scrapy爬虫框架介绍

scrapy:功能强大的爬虫框架

爬虫框架:爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。

爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。

python提取专利信息 python 信息提取_python_02


python提取专利信息 python 信息提取_爬虫_03


Engine:控制所有模块之间的数据流;不需要用户修改;根据条件触发事件。

Downloader:根据请求下载网页;不需要用户修改;

Scheduler:对所有爬取请求进行调度管理;不需要用户修改。

Downloader Middleware
目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制;
功能:修改、丢弃、新增请求或响应
用户可以编写配置代码。

Spdier
解析Downloader返回的响应(Response)
产生爬取项(scrped item)
产生额外的爬取请求(Request)
需要用户编写配置代码

Item piplines
以流水线的方式处理spider产生的爬取项
由一组操作顺序组成,类似流水线,每个操作是一个Item Pipline类型。
可能操作包括:清理、检验和查重爬取项中的HTML数据,将数据存储到数据库。
需要用户编写配置代码。

Spider Middleware
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求和爬取项
用户可以编写配置代码

requests库和scrapy比较
相同点:两者都可以进行页面请求和爬取,python爬虫的两个重要技术路线。
两者可用性都好,文档丰富,入门简单。
两者都没有处理js、提交表单、应对验证码等功能(可扩展)。
requests VS scrapy

requests

scrapy

页面级爬虫

网站级爬虫

功能库

框架

并发性考虑不足,性能较差

并发性好,性能较高

重点在于页面下载

重点在于爬虫结构

定制灵活

一般定制灵活,深度定制困难

上手十分简单

入门稍难

选用哪个技术路线开发爬虫?
非常小的需求,requests库;
不太小的需求,Scrapy框架;
定制程度很高的需求(不考虑规模),自搭框架,requests>Scrapy

Scrapy常用命令

Scrapy命令行
Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行。
Scrapy命令行格式

scrapy[options][args]

Scrapy常用命令

命令

说明

格式

startproject

创建一个新工程

scrapy startproject[dir]

genspider

创建一个爬虫

scrapy genspider[options]

settings

获取爬虫配置信息

scrapy settings[options]

crawl

运行一个爬虫

scrapy crawl

list

列出工程中所有爬虫

scrapy list

shell

启动URL调试命令行

scrapy shell[url]

Scrapy爬虫的命令行逻辑

为什么Scrapy采用命令行创建和运行爬虫?

命令行(不是图形界面)更容易自动化,适合脚本控制。

本质上,Scrapy是给程序员用的,功能(而不是界面)更重要。

python提取专利信息 python 信息提取_python提取专利信息_04


python提取专利信息 python 信息提取_python提取专利信息_05


python提取专利信息 python 信息提取_python_06


生成器的使用一般与循环搭配在一起

python提取专利信息 python 信息提取_爬虫_07


Scrapy爬虫的使用步骤

步骤1:创建一个工程和Spider模板

步骤2:编写Spider

步骤3:编写item pipeline

步骤4:优化配置策略

Scrapy爬虫的数据类型
Request类
Response类
Item类

Request类

class scrapy.http.Request()

Request对象表示一个HTTP请求。

由Spider生成,由Downloader执行。

python提取专利信息 python 信息提取_python_08


Response类

class scrapy.http.Response()

Response对象表示一个HTTP响应

由Downloader生成,由Spider处理

python提取专利信息 python 信息提取_字符串_09


Item类

class scrapy.item.Item()

Item对象表示一个从HTML页面中提取的信息内容

由Spider生成,由Item Pipeline处理

Item类似字典类型,可以按照字典类型操作Scrapy爬虫提取信息的方法

Scrapy爬虫支持多种HTML信息提取方法

Beautiful Soup

Lxml

re

XPath Selector

CSS Selector

python提取专利信息 python 信息提取_python提取专利信息_10

网络爬虫

(1)检查 robots.txt协议;如:http://www.aobosir.com/robots.txt
(2)检查 网站地图 Sitemap
(3)查看网站所有者
安装相应的模块:pip install python-whois

import whois
print(whois.whois('www.baidu.com'))

(4)from urllib import robotparser解析robots协议

(5)查看网站大小:site:http://www.baidu.com

如:

python提取专利信息 python 信息提取_爬虫_11


(6)使用builtwith识别网站所用技术

import builtwith
builtwith.parse("http://www.baidu.com")

拓展:Numpy库、Matplotlib库、Pandas库