【笔记】Python网络爬虫与信息提取

news/2024/5/19 13:30:18/文章来源:https://blog.csdn.net/qq_45192089/article/details/108582575

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

    • 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且在一个字符串的结尾
()分组标记,内部只能使用“或”操作符abc)表示abc,
\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:功能强大的爬虫框架
爬虫框架:爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
在这里插入图片描述
在这里插入图片描述
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

requestsscrapy
页面级爬虫网站级爬虫
功能库框架
并发性考虑不足,性能较差并发性好,性能较高
重点在于页面下载重点在于爬虫结构
定制灵活一般定制灵活,深度定制困难
上手十分简单入门稍难

选用哪个技术路线开发爬虫?
非常小的需求,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是给程序员用的,功能(而不是界面)更重要。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成器的使用一般与循环搭配在一起
在这里插入图片描述
Scrapy爬虫的使用步骤
步骤1:创建一个工程和Spider模板
步骤2:编写Spider
步骤3:编写item pipeline
步骤4:优化配置策略

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

Request类
class scrapy.http.Request()
Request对象表示一个HTTP请求。
由Spider生成,由Downloader执行。
在这里插入图片描述
Response类
class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理
在这里插入图片描述
Item类
class scrapy.item.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理
Item类似字典类型,可以按照字典类型操作

Scrapy爬虫提取信息的方法
Scrapy爬虫支持多种HTML信息提取方法
Beautiful Soup
Lxml
re
XPath Selector
CSS Selector
在这里插入图片描述

网络爬虫

(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
如:
在这里插入图片描述
(6)使用builtwith识别网站所用技术

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

拓展:Numpy库、Matplotlib库、Pandas库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6002.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java架构师常见基础面试题(附答案)

随着每日确诊病例人数的减少以及治愈患者人数增多,随着这场抗“疫”战争即将以胜利告终,接踵而来的是企业复工、金三银四求职高峰季的来临。有很多Java工程师想要把握住这个机会,实现升职加薪、成为Java架构师。但你知道企业在招聘面试时会提…

证件照换底色

阅读原文 如有侵权,请联系立即删除。 5种方法轻松给证件照换底色不同底色的证件照有着不同的用途。如白底的证件照一般用于身份证、港澳通行证等用途;而蓝底的证件照则用于工作证、简历等。例如我们需要提供蓝色背景的证件照,而手头只有白色背景的证件照,该怎么办呢?其实我…

开学季征文丨来大学已两年,我还有几个两年?

👋写在前面 大家好,我是陈橘又青,一名双非本科大学生,计算机科学与技术专业,最近因为疫情的原因,开学以来一直在家里上网课,也不是很忙,所以我想借着这次开学季征文活动,…

羧基化聚苯乙烯-二氧化硅复合材料/季铵化壳聚糖掺杂荷正电聚苯乙烯微球的制备步骤

今日小编为大家分享了羧基化聚苯乙烯-二氧化硅复合材料/季铵化壳聚糖掺杂荷正电聚苯乙烯微球的制备步骤,一起来看! 羧基化聚苯乙烯-二氧化硅复合超疏水涂层的制备方法,其特征在于包括如下步骤: (聚苯乙烯种子微球的制备;羧基修饰的聚苯乙烯微…

【控制】滑模控制,小例子,有程序有结果图

目录滑模控制的一点笔记和看法1【控制】滑动模型控制(Sliding Mode Control)2【控制】滑模控制,小例子,有程序有结果图3【控制】滑模控制,滑模面的选择文章目录1 问题描述2 滑模控制器设计2.1 滑模面选择2.2 控制器设计…

麻了,别再为难软件测试员了

前言 有不少技术友在测试群里讨论,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些测试工程师了。 这不,为了帮大家节约时…

hive中使用iceberg表格式时锁表总结

1. 原因 写入iceberg表时,会在hive_locks表中插入一条记录,表示该表正在被写入(hive中的独占锁)当数据插入完成后,会自动删除该条记录。 2. 出现场景 (1)在同时往同一个iceberg表中写入数据时,会出现Retrying task after failure: Waiting for lock之类的警告信息 如果有…

Docker 环境 Nacos2 MySQL8

本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。 1 拉取镜像 1.1 创建目录 在硬盘上创建 nacos 的有关目录: mkdir -p /Users/yygnb/dockerMe/…

FPGA之旅设计99例之第十三例-----FPGA在OLED上显示DHT11数据

一. 简介 这是FPGA之旅设计的第十三例啦,本例是一个综合性的例程,基于OLED屏幕显示,和DHT11温湿度采集,将DHT11采集到的温湿度显示到OLED屏幕上。 在开始本例之前,先补充一下,在上例中,代码中…

Webpack 打包 - 14. html压缩

这里使用 html-webpack-plugin 插件压缩 html 文件。 1.文件结构 2.代码 index.html<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>webpack</title> </head> <body> <!--这里…

《Hyperspectral Image Classification With Deep Feature Fusion Network》论文笔记

论文题目《Hyperspectral Image Classification With Deep Feature Fusion Network》 论文作者:Weiwei Song, Shutao Li, Leyuan Fang,Ting Lu 论文发表年份:2018 网络简称:DFFN 一、本文提出的挑战 1.由于光谱混合和光谱特征空间变异性的存在,HSIs通常具有非常复…

KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

KingbaseES 、repmgr案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作。若主节点已经失效,希望将异地备机提升为主节点。 $bin/repmgr standby promote 适用版本:KingbaseES V8R6 集群节点信息…

Postman和Jmeter的区别

Postman是一款功能强大的用于发送HTTP请求的Chrome插件&#xff0c;主要用于接口测试&#xff1b; Jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;也可以用来进行接口测试。 很多同学经常将两款工具混淆&#xff0c;这里就为大家介绍一下二者的区别。 1…

Java 将Excel转为UOS

以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格。既有的Excel表格文件,可以通过格式转换的方式转换为UOS格式,本文将对此作相关介绍。 【导入jar包】 使用jar包:Spire.Xls…

Nginx log 日志分割

Nginx日志不处理的话,会一直追加,文件会变得很大 Linux nginx_log.sh#!/bin/bash date=$(date +%F -d -1day) cd /usr/local/nginx/logs if [ ! -d bak ] ; thenmkdir -p bak fi mv access.log bak/access_$date.log mv error.log bak/error_$date.log # /usr/bin/…

Cache一致性导致的踩内存问题【转】

转自:http://blog.coderhuo.tech/2019/07/28/DMA_mem_crash/ 本文主要分享一个Cache一致性踩内存问题的定位过程,涉及到的知识点包括:backtrace、内存分析、efence、wrap系统函数、硬件watchpoint、DMA、Cache一致性等。 1 背景 设备上跑的是嵌入式实时操作系统(RTOS,具体为…

9.7--prompt理论学习

但是这些表现低于有监督的方法&#xff0c;但是我们在工作当中&#xff0c;我们引入了PET 利用模板的训练 Pattern Exploiting Training(PET) 把分类变成了完形填空的问题&#xff0c;来帮助模型理解任务 最后卖弄一下他的论文 最后在训练集上运用了有监督的训练。 并且远远…

[NOIP2014 提高组] 飞扬的小鸟题解

[NOIP2014 提高组] 飞扬的小鸟题解 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏…

java1.8环境配置

https://blog.csdn.net/blbyu/article/details/126152202 可用,java1.8环境配置 最主要的是这个步骤,小心仔细看清楚 java1.8 下载 地址 https://www.oracle.com/java/technologies/downloads/#java8-windows 往下拉可用看到jdk8版本下载即可