学习是我快乐 第十五天
Day 015
一、爬虫
1.请求网页,获取响应结果
- 使用requests ,请求地址,获取响应结果。
2.解释网页,提取数据
- 根据前端的语法或者正则表达式提取数据。
3.数据持久化
- 将数据写入文件进行保存。
二、反爬机制和反反爬
1.User-Agent:将爬虫伪装成浏览器。例如:某瓣电影、某友集。
2.文字反爬:将页面中重要信息使用符号进行隐藏。例如:某眼电影、某子二手车、某众点评、某查查、某团等。
3.动态页面:使用selenium模块(自动化测试的模块),能够模拟人的行为使用浏览器。
4.人机验证:九宫格选图片、选成语(词语)、图片加计算公式、字母数字验证码、滑块验证码、短信验证等。
- 九宫格选择图片 —> 深度学习。https://cuiqingcai.com/36060.html。
- 选成语或者词语 —> 深度学习。超级鹰。
- 图片加计算公式、字母数字验证码 —> 光学文字识别(OCR):easyocr、百度飞桨、百度AI开发。者平台等。
- 滑块验证:selenium、pyautgui—> 引入对应的物理原理。
- 短信验证:等待、解码平台。
5.封IP:代理IP:某光代理IP、某菇代理、莫大爷、某麻代理等。
6.检测selenium:滑块验证无法拖成功,例如:某宝---->
a.加入屏蔽selenium的代码。
b.修该selenium驱动的底层代码。
7.网页中的数据放在图片中:光学文字识别。
8.登陆使用:淘宝可以在requests中传入cookie信息。或者在selenium中传入cookie。或者使用selenium操作登陆的输入框、按钮
补充 : RPA —> 机器人流程自动化(影刀、八爪鱼、壁虎等)—> 从selenium进行的演变
三、BeautifulSoup4
1.BeautifulSoup4 - 根据响应结果解析页面、提取数据
- BeautifulSoup(网页源码,解析器) --> 将字符串类型的源代码转换为bs4类型学·
- bs4模块提供了一系列提取数据的方法,这些方法的操作对象的bs4类型的数据。
+select:根据CSS选择器(标签、class、id等)定位数据, - 得到的是符合这个选择器的所有结果(整体是列表,列表中每个元素是一个bs4类型的数据)
- select_one:根据CSS选择器(标签、class、id等)定位数据,
- 得到的是符合这个选择器的一个结果(是一个bs4类型数据)
- text:从bs4类型数据中提取标签内的内容,结果为str
- attrs:从bs4类型数据中提取标签内容属性值,结果为str
2.headers = {}
- headers是一个字典:{key:value}
- headers是给爬虫提供伪装的
- User-Agent --> 将爬虫伪装成浏览器
- User-Agent获取方法
3.对比页面数据内容是否一致
+网页:分为静态页面和动态页面
- 静态页面:内容的写死的,除非人为的进行内容修改,否则这个页面的内容是一成不变的。
- 动态页面:内容不是写死的,使用某种特殊的技术(JavaScript)使数据通过某种方式显示在页面中。
- requests得到的结果是静态页面的结果
练习-试对某家二手房进行数据爬取
import requests
from bs4 import BeautifulSoup
import time
import random
from tqdm import tqdmfor page in tqdm(range(1, 101)):print(f'第{page}页')URL = f'https://cd.某家.com/ershoufang/pg{page}/'# 伪装爬虫Headers = {'User-Agent': '此处输入自己的信息即可'}# 请求地址,获取响应结果response = requests.get(url=URL, headers=Headers)if response.status_code == 200:# print(response.text)soup = BeautifulSoup(response.text, 'html.parser')li_list = soup.select('body > div.content > div.leftContent> ui > li')print(len(li_list))for i in li_list:house_href = i.select_one('li>a ').attrs['href']print(house_href)# 请求更深层次的房屋详情页链接house_response = requests.get(url=house_href,headers=Headers)print(house_response.text)soup1 = BeautifulSoup(house_response.text,'html.parser')# 小区名字house_name = soup1.select_one('div.communityName > a ').textprint(house_name)# 位置areaName = soup1.select_one('div.areaName > span.into').text# 补充supplement = soup1.select_one('div.areaName > a').text# print(supplement,type(supplement),len(supplement))supplement_1 = '暂无数据' if supplement == ''else supplementprint(supplement_1)# 单价# BeautifulSoup4能够将一层标签下的所有内容取出来。unitPrice = soup1.select_one('span.unitPriceValue').textprint(unitPrice)# 总价totalPrice = soup1.select_one('div.price > span').text + '万'print(totalPrice)# 基本属性baseInto = soup1.select('div.base li')print(baseInto)# 处理后结过baseInto_In_list = [i.text for i in baseInto]# 交易属性changeInto = soup1.select('div.transaction li > span')print(changeInto)# changeInto_list = [i.text.replace('\n','')for i in changeInto]changeInto_list = [i.text.strip() for i in changeInto]print(changeInto)# 可单行写入 可多行写入# 休眠--->以秒为单位# uniform(a,b)从范围内随机取浮点数time.sleep(random.uniform(1,3))# 使用代理IP, ----> 代理IP池(自动检测IP是否失效,能够即使补充池中的数量)else:print(response.status_code)
学习是我快乐 第十五天相关推荐
- 零基础带你学习MySQL—日期函数(十五)
零基础带你学习MySQL-日期函数(十五) 一.CURRENT_DATE ( ) 当前日期 二.CURRENT_TIME() 当前时间 三.CURRENT_TIMESTAMP()当前时间戳 四.练习
- 深度学习之图像分类(二十五)-- S2MLPv2 网络详解
深度学习之图像分类(二十五)S2MLPv2 网络详解 目录 深度学习之图像分类(二十五)S2MLPv2 网络详解 1. 前言 2. S2MLPv2 2.1 S2MLPv2 Block 2.2 Spat ...
- LINUX学习基础篇(三十五)日志管理
LINUX学习基础篇(三十五)日志管理 日志管理 系统中常见的日志文件 日志文件格式 rsyslogd服务的配置文件 日志轮替 logrotate配置文件 配置文件夹 /etc/logrotate.d ...
- AngularJS学习之旅—AngularJS 模块(十五)
一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...
- 一个正经的前端学习 开源 仓库(阶段十五)
低调务实优秀中国好青年 (简介) && 附加答案 github.com/webVueBlog/- 一个 ☝️ 正经的前端学习 开源 仓库,启发来自 淘宝大佬 @冴羽 ,初心做一个真正能 ...
- 学习是我快乐 第十天
Day 09 一.文件的读写模块 1.xlwt.wlrd xlwt:xls文件写操作. xlrd:xls文件读操作. 2. openpyxl和xlwt.wlrd对比 a. openpyxl行号从1开始 ...
- EXTJS学习系列提高篇:第二十五篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--右键菜单篇...
本文介绍如何在grid列表里 在某行上面单击右键弹出菜单的功能 先看看效果图: 如上图所示,具体菜单的功能没有去实现,这里和前几篇的后台都极为类似,有需要后台代码的朋友只需要浏览前几篇即可. 下面仅仅 ...
- kotlin学习之伴生对象(十五)
目录 1. 基本用法 2. 实现接口 3. 伴生对象扩展 伴生对象最简单直白的理解就是与一个类相伴而生的对象,由于它处于类内部,所以必然和包含它的类存在某种联系. 1. 基本用法 伴生对象使用关键字c ...
- 学习Spring Boot:(十五)使用Lombok来优雅的编码
前言 Lombok 是一种 Java? 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 正文 添加依赖 在 pom.xml ...
最新文章
- Guide To Using The Gnosis Multisig Wallet
- c++ double 只输出五位_C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记...
- Java 并发(JUC 包-03)
- (64)FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项?
- 初中三年级计算机课程教案,三年级信息技术教案下
- 图像处理之基础---大话小波和卷积
- WCF Data Services查询
- PHP 单元测试问题记录
- WPS怎么设置显示文章目录
- 手机游戏满江红里的诗句
- accuracy(准确率), precision(精密度), recall(召回率), specificity(特异性), and F1-score(F1分数):分别是什么意思?
- 网络安全开源扫描引擎
- Greasy Fork发布油猴脚本
- 多智能体协同控制实验平台的研发
- Android问题解决-部分机型上传图片失败
- STM32F4 FPU浮点运算单元
- SLM328美格4G模组SDK开发笔记
- MLOps极致细节:15. Azure ML数据集的上传(Azure Workspace DataStore Upload)与注册(Azure Dataset Register)
- Office WORD如何简繁转换
- 计算机外部设备培训教学计划,最新计算机培训教学计划(8页)-原创力文档