爬虫01-爬虫原理以及爬虫前期准备工作

文章目录

  • 1 爬虫基本原理
    • 什么是爬虫
    • 爬虫功能详解
    • 爬虫基本流程
    • 两个概念:request和response
  • 2 一些问题
    • 爬虫能抓取什么样的数据?
    • 抓取的数据怎么提取部分内容?数据解析方式。
    • 为什么我爬虫抓取的数据和浏览器看到的不一样
    • 怎样解决JavaScript渲染的问题?
    • 怎样保存数据

1 爬虫基本原理

什么是爬虫

爬虫,又名网络爬虫。顾名思义,就是在网络中爬行的一只蜘蛛。
互联网可以看作是一张巨大的网,爬虫就在这个网上爬来爬去,如果在爬行的过程中遇到了一些网站资源,就会把它抓取下来。
如何抓取、抓取什么内容就由你来决定!

爬虫功能详解

简单来说,爬虫就是:请求网站并提取数据的自动化程序。
关键字说明:
请求:平时我们打开浏览器输入网址按下回车可以看到一些页面,这个过程 其实就是通过浏览器去请求目标服务器,目标服务器同意请求之后返回给我们一个网页。那么爬虫就是写一段代码模拟浏览器的这个过程,去获取网页资源。
提取:一般请求获取到的网页资源是一串HTML代码,其中就包含一些标签以及我们需要的文字等资源。接下来就需要把这些信息提取出来。
自动化:一个爬虫代码一般会爬取一个对应的目标信息,我们程序写好并运行代码之后就会自动的去完成爬取的过程,并且把资源爬取到本地。

爬虫基本流程

在这里插入图片描述
爬虫的基本流程基本就这几步:
1 发起请求
2 获取响应内容
3 解析内容
4 保存数据
中间可能会经过一些其他复杂的步骤,但基本步骤就这几步。

两个概念:request和response

request(请求):Request 是爬虫发送给服务器的信息,它包含了要获取特定资源的详细信息。当我们使用爬虫发送一个请求时,我们可以指定请求的类型(GET、POST等)、目标URL、请求头(Headers)、请求体(Body)等信息。请求的目的是向服务器请求特定的数据或资源。
在这里插入图片描述
response(响应):Response 是服务器对 Request 的回应,它包含了服务器返回的数据和相关的元信息。当服务器接收到一个请求后,它会根据请求的内容进行处理,并返回相应的数据。响应通常包括状态码(例如200表示成功,404表示未找到等)、响应头(Headers)、响应体(Body)等信息。
在这里插入图片描述

在这里插入图片描述

2 一些问题

爬虫能抓取什么样的数据?

  • 网页文本:如HTML文档、Json格式文本等。
  • 图片:获取到的是二进制文件,保存为图片格式。
  • 视频:同为二进制文件,保存为视频格式即可。
  • 其他:只要是网页上能看得到的东西全都可以爬取下来。

抓取的数据怎么提取部分内容?数据解析方式。

请求服务器之后大部分情况下得到的是HTML代码,所以需要对数据进行解析,获取我们需要的部分。以下是解析数据的方法,选择适合当前情况的方式。

  • 直接处理:适用于网页比较简单的情况,直接获取数据,并用strip简单处理一下头尾就可以了。
  • json解析:适用于用Ajax加载的网页,通常返回的格式就是json
  • 正则表达式:非常常用的方法,它是规则字符串,来把HTML代码中的相应的内容提取出来
  • BeautifulSoup:解析库,相对于正则表达式更好用,更加容易
  • PyQuery:使用PyQuery可以轻松地从网页或字符串中提取数据,并对文档进行修改和操作。
  • XPath:“网页树”,XPath使用路径表达式来描述和定位文档中的节点,通过这些表达式可以实现非常精确的节点选择。

为什么我爬虫抓取的数据和浏览器看到的不一样

当我们使用爬虫抓取网页时,通常只能获取到页面的原始HTML代码,而无法获取到经过JavaScript渲染后生成的动态内容或者其他的一些内容:例如css、图片或者视频等。如果网站使用了JavaScript来加载或修改页面的部分内容,那么你通过爬虫获取到的数据可能与浏览器中看到的不一致。

在这种情况下,可以考虑使用一些支持JavaScript渲染的工具或库,例如Selenium或Puppeteer。这些工具可以模拟浏览器行为,执行JavaScript代码,并获取到完整的页面内容。这样可以更接近浏览器中所看到的内容。

怎样解决JavaScript渲染的问题?

  • 分析Ajax请求
    Ajax(Asynchronous JavaScript and XML)是一种使用JavaScript实现异步通信的技术。在传统的Web页面中,用户交互通常需要刷新整个页面才能显示新的内容。而使用Ajax,可以通过后台异步请求数据,然后更新页面的局部内容,而不需要刷新整个页面。
    现在网页的大部分关键数据都是通过Ajax请求得到的,并通过后期的js渲染显示到页面上。
  • Selenium/WebDriver
    驱动一个浏览器模拟加载一个网页,这个是用来做自动化测试的一个工具。
    通过这个工具去加载一个网页,然后用page_source直接获取网页源代码,可以减少js渲染的问题。
#说明:下面代码就是使用selenium去打开谷歌浏览器,并输入百度网址,然后定位到url输入关键词的部分去输入hello world,并搜索,然后关闭。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys# 创建WebDriver对象
driver = webdriver.Chrome()# 打开百度网站
driver.get("http://www.baidu.com")# 定位搜索框元素,并输入关键字,然后输出网页源代码
search_box = driver.find_element_by_name("wd")
search_box.send_keys("Hello World")
search_box.send_keys(Keys.RETURN)
print(driver.page_source)
# 关闭WebDriver对象和浏览器窗口
driver.quit()
  • Splash
    跟上一个方法差不多,也是模拟js渲染的
  • PyV8、 Ghost.py

怎样保存数据

保存数据可以有多个方式。
在这里插入图片描述

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

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

相关文章

计算数学表达式的程序(Java课程设计)

1. 课设团队介绍 团队名称 团队成 员介绍 任务分配 团队成员博客 XQ Warriors 徐维辉 负责计算器数据的算法操作,如平方数、加减乘除,显示历史计算记录 无 邱良厦(组长) 负责计算器的图形设计,把输入和结果显…

公共用例库计划--个人版(二)主体界面设计

1、任务概述 计划内容:完成公共用例库的开发实施工作,包括需求分析、系统设计、开发、测试、打包、运行维护等工作。 1.1、 已完成: 需求分析、数据库表的设计:公共用例库计划–个人版(一) 1.2、 本次待完…

2024新年烟花代码完整版

文章目录 前言烟花效果展示使用教程查看源码HTML代码CSS代码JavaScript 新年祝福 前言 在这个充满希望和激动的2024年,新的一年即将拉开帷幕,而数字科技的创新与发展也如火如荼。烟花绚丽多彩的绽放,一直以来都是新年庆典中不可或缺的元素。…

微信小程序 组件component ts用法

还在为 使用了ts 但是组件内显示this.setData/this.data.xxx ts报错 觉得难看吗? 还在为明明定义了applyInfo,明明应该有setData为何报错? 还在为不知道如何写类型而烦心吗? 不如转变思路将methods看成为一个对象 增加断言 as a…

实现多级缓存(Redis+Caffeine)

文章目录 多级缓存的概述多级缓存的优势 多级缓存的概述 在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在…

公网环境使用移动端设备+cpolar远程访问本地群晖nas上的影视资源

文章目录 1.使用环境要求:2.下载群晖videostation:3.公网访问本地群晖videostation中的电影:4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端(搭载安卓,ios,ipados等系统的设备…

小家电应用解决方案以及选型指南

电磁炉是现代厨房中常见的一种小家电产品,它利用电磁感应加热原理,可以快速、高效地进行烹饪。在电磁炉的设计和制造过程中,功率开关芯片的选择对于产品的性能和成本有着重要的影响。 针对电磁炉的应用需求,推荐采用LED驱动芯片S…

蓝桥杯省赛无忧 STL 课件12 vector

01 vector的定义和特性 02 vector的常用函数 03 vector排序去重 示例&#xff1a; #include<bits/stdc.h> using namespace std; int main(){vector<int> vec {5,2,8,1,9};sort(vec.begin(),vec.end());for(const auto& num : vec){cout<<num<<&q…

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本&#xff1a;openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包&#xff1a; $sudo yum update #2、接下来&#xff0c;我们需要从源代码编译和构建OpenS…

【原生部署】SpringBoot+Vue前后端分离项目

本次主要讲解SpringBootVue前后端完全分离项目在CentOS云服务器上的环境搭建与部署过程&#xff0c;我们主要讲解原生部署。 一.原生部署概念 原生部署是指将应用程序&#xff08;一般是指软件、应用或服务&#xff09;在底层的操作系统环境中直接运行和部署&#xff0c;而不…

微软Office 2019 批量授权版

软件介绍 微软办公软件套件Microsoft Office 2019 专业增强版2024年1月批量许可版更新推送&#xff01;Office2019正式版2018年10月份推出&#xff0c;主要为多人跨平台办公与团队协作打造。Office2019整合对过去三年在Office365里所有功能&#xff0c;包括对Word、Excel、Pow…

Docker的介绍及安装基本操作命令

前言 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefo…

阿里云和AWS之间的应用程序防火墙比较及选择建议!

对于大多数开发人员来说&#xff0c;托管在云中的 Web 应用程序或 REST API 是一种常见方案。但是&#xff0c;并非每个应用程序都具有相同的安全级别。将 Web 应用程序防火墙 &#xff08;WAF&#xff09; 添加到 Web 应用程序是提高安全性的有用方法。 在本文中&#xff0c;…

Python实用小工具(4)——邮件轰炸机,给朋友搞点乐子(附源码+exe文件)

欢迎来到MatpyMaster&#xff01;今天我们将使用Python来批量发送邮件&#xff0c;让你的邮件推送变得更加高效。废话不多说&#xff0c;直接开搞&#xff01;使用声明&#xff1a; 请确保你的邮箱开启了SMTP服务&#xff0c;并获取了授权码。 选择合适的发送间隔&#xff0c;…

VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

【PaperReading】5. Open-Vocabulary SAM

Category Content 论文题目 Open-Vocabulary SAM: Segment and Recognize Twenty-thousand Classes Interactively 作者 Haobo Yuan1 Xiangtai Li1 Chong Zhou1 Yining Li2 Kai Chen2 Chen Change Loy1 1S-Lab, Nanyang Technological University 2Shanghai Artificial In…

找不到msvcr120.dll怎样修复,分享4种修复方法

msvcr120.dll是Microsoft Visual C 2012 Redistributable Package的一个关键组件&#xff0c;负责提供C运行时库。许多应用程序在运行时都需要依赖这个库文件。然而&#xff0c;在日常使用过程中&#xff0c;不少用户会遇到msvcr120.dll丢失的问题&#xff0c;导致程序无法正常…

Linux 文件(夹)权限查看

命令 : ls -al ls -al 是一个用于列出指定目录下所有文件和子目录的命令,包括隐藏文件和详细信息。其中,-a 选项表示显示所有文件,包括以 . 开头的隐藏文件,-l 选项表示以列表的形式显示文件的详细信息。 本例中:drwxrwxr-x 为权限细节。 权限细节(Permission detail…

制造业CRM是什么?都有哪些特色功能?

近些年&#xff0c;制造业和别的行业一样&#xff0c;经历过翻天覆地的转型。从以分销为基础到客户至上&#xff0c;所有行业都在确定商业模式的全局性变化。在这样的环境下&#xff0c;不管什么规模的设备制造企业都意识到将创新与技术融进业务流程的必要性。CRM管理系统是促进…