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)

学习是我快乐 第十五天相关推荐

  1. 零基础带你学习MySQL—日期函数(十五)

    零基础带你学习MySQL-日期函数(十五) 一.CURRENT_DATE ( ) 当前日期 二.CURRENT_TIME() 当前时间 三.CURRENT_TIMESTAMP()当前时间戳 四.练习

  2. 深度学习之图像分类(二十五)-- S2MLPv2 网络详解

    深度学习之图像分类(二十五)S2MLPv2 网络详解 目录 深度学习之图像分类(二十五)S2MLPv2 网络详解 1. 前言 2. S2MLPv2 2.1 S2MLPv2 Block 2.2 Spat ...

  3. LINUX学习基础篇(三十五)日志管理

    LINUX学习基础篇(三十五)日志管理 日志管理 系统中常见的日志文件 日志文件格式 rsyslogd服务的配置文件 日志轮替 logrotate配置文件 配置文件夹 /etc/logrotate.d ...

  4. AngularJS学习之旅—AngularJS 模块(十五)

    一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...

  5. 一个正经的前端学习 开源 仓库(阶段十五)

    低调务实优秀中国好青年 (简介) && 附加答案 github.com/webVueBlog/- 一个 ☝️ 正经的前端学习 开源 仓库,启发来自 淘宝大佬 @冴羽 ,初心做一个真正能 ...

  6. 学习是我快乐 第十天

    Day 09 一.文件的读写模块 1.xlwt.wlrd xlwt:xls文件写操作. xlrd:xls文件读操作. 2. openpyxl和xlwt.wlrd对比 a. openpyxl行号从1开始 ...

  7. EXTJS学习系列提高篇:第二十五篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--右键菜单篇...

    本文介绍如何在grid列表里 在某行上面单击右键弹出菜单的功能 先看看效果图: 如上图所示,具体菜单的功能没有去实现,这里和前几篇的后台都极为类似,有需要后台代码的朋友只需要浏览前几篇即可. 下面仅仅 ...

  8. kotlin学习之伴生对象(十五)

    目录 1. 基本用法 2. 实现接口 3. 伴生对象扩展 伴生对象最简单直白的理解就是与一个类相伴而生的对象,由于它处于类内部,所以必然和包含它的类存在某种联系. 1. 基本用法 伴生对象使用关键字c ...

  9. 学习Spring Boot:(十五)使用Lombok来优雅的编码

    前言 Lombok 是一种 Java? 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 正文 添加依赖 在 pom.xml ...

最新文章

  1. Guide To Using The Gnosis Multisig Wallet
  2. c++ double 只输出五位_C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记...
  3. Java 并发(JUC 包-03)
  4. (64)FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项?
  5. 初中三年级计算机课程教案,三年级信息技术教案下
  6. 图像处理之基础---大话小波和卷积
  7. WCF Data Services查询
  8. PHP 单元测试问题记录
  9. WPS怎么设置显示文章目录
  10. 手机游戏满江红里的诗句
  11. accuracy(准确率), precision(精密度), recall(召回率), specificity(特异性), and F1-score(F1分数):分别是什么意思?
  12. 网络安全开源扫描引擎
  13. Greasy Fork发布油猴脚本
  14. 多智能体协同控制实验平台的研发
  15. Android问题解决-部分机型上传图片失败
  16. STM32F4 FPU浮点运算单元
  17. SLM328美格4G模组SDK开发笔记
  18. MLOps极致细节:15. Azure ML数据集的上传(Azure Workspace DataStore Upload)与注册(Azure Dataset Register)
  19. Office WORD如何简繁转换
  20. 计算机外部设备培训教学计划,最新计算机培训教学计划(8页)-原创力文档

热门文章

  1. HDU 5266 pog loves szh III (LAC)
  2. echarts使用ajax接收数据并展示
  3. Android Shape制定圆形和圆环形状
  4. 毕设-基于SpringBoot家庭理财管理系统v2
  5. Android 手机下载图片保存本地后,系统相册无法查看
  6. swagger-ui页面设置接口请求头head参数
  7. 移动端图片上传裁切(版权归秒为所有,仅为搬运)
  8. pylogin系列之V2EX自动领币消息提醒
  9. SQL SERVER 表分区技术
  10. linux ps1 主机名 ip,Linux主机名颜色设置,ps1设置,然linux有颜色