python爬虫原理及源码解析(入门)

这篇具有很好参考价值的文章主要介绍了python爬虫原理及源码解析(入门)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、爬虫是什么?

​ 如果将互联网比作一张大的蜘蛛网,数据便是存放在蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序。

爬虫能通过网址获得网络中的数据、然后根据目标解析数据、存储目标信息,可以节省大量的人力物力,简单地说,网络爬虫就是获取互联网公开数据的自动化工具,像百度、google本质上就是超级爬虫,百度搜索引擎的爬虫叫作百度蜘蛛(Baiduspider)。百度蜘蛛每天会在海量的互联网信息中进行爬取,爬取优质信息并收录,当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户。

二、爬虫的基本原理

python爬虫原理及源码解析(入门)

网络爬虫,基本原理就是在爬虫程序得到URL(链接),向目标服务器发起HTTP请求访问,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

  • 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;

三、HTTP协议与响应

爬虫要向URL发送请求,那么就要依赖于HTTP/HTTPS协议,HTTPS比HTTO更安全,但性能更低

HTTP(Hypertext Transfer Protocol)协议又称超文本传输协议,它是一种客户端与服务器之间的请求-响应协议,比如 浏览器就是可以被看作客户端,在浏览器地址栏输入想访问的网址,浏览器就会向该链接的服务器发送访问请求,然后等待服务返回给浏览器响应

python爬虫原理及源码解析(入门)

HTTP有不同的请求方法,最常见的两种是GET和POST

  • GET方法用于获取数据,如向网页发送get请求得到网页类容
  • POST方法用于创建数据,如在浏览器中提交表单信息时,浏览器会发送POST请求

一个完整的HTTP请求数据里面包含三部分类容:请求行、请求头、请求体

请求行

python爬虫原理及源码解析(入门)

在以上URL请求链接中www.douban.com域名后的第一个斜杠表示资源路径的根,所以/movie/top250就是要访问的资源路径,在请求行中可以添加查询参数,可以传递给服务器额外的信息。请求行中的HTTP/1.1表示HTTP的协议版本

请求头

python爬虫原理及源码解析(入门)

用于告知客户端的相关信息,比如请求时浏览器发出的还是其它程序发出来的,如果是浏览器的话则展示类型、版本等等信息

请求体

请求体里面可以放客户端传给服务器的其它任意数据,但get方法的请求体一般是空的

4、爬虫实现源码

以下使用的作为示范的编译器是PyCharm

引入第三方库

首先引入requests与bs4的第三方库

python爬虫原理及源码解析(入门)

引入requests

requests是Python中可以用代码来模拟发送网络请求,并得到响应数据的一个第三方库requests

在终端(terminal)输入:pip install requests

显示此信息表示安装成功

python爬虫原理及源码解析(入门)
引入bs4

BeautifulSoup又称bs4,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据

在终端(terminal)输入:pip install bs4

显示此信息表示安装成功
python爬虫原理及源码解析(入门)

编写简易爬虫

以下爬虫是扒取豆瓣电影Top250的信息

源码

import requests
from bs4 import BeautifulSoup

# 修改请求头中的User-Agent参数 以达到模拟用户访问的效果
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 "
                  "Safari/537.36 Edg/112.0.1722.48"
}
# 循环判断 获取分页数据 从0-250 每次分页加25值
for start_num in range(0, 250, 25):
    # get方式请求链接 并扒取html数据
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    html = response.text
    # 使用BeautifulSoup方法 获取html
    soup = BeautifulSoup(html, "html.parser")
    # 指定span标签
    all_title = soup.findAll("span", attrs={"class": "title"})
    # 循环html标签下的 span标签
    for title in all_title:
        # 声明索引值
        title_string = title.string
        # if判断 不趴取span标签中 含下滑线/
        if "/" not in title_string:
            # 打印索引值
            print(title_string)

以上爬虫代码扒的页面数据所以要观察 页面的html元素

进入https://movie.douban.com/top250链接 f12查看页面的html元素 选择到要扒的数据 可以看到

该条数据(肖申克的救赎)是在span标签里且class值为title的元素 然后用这些条件指定到该标签的值

soup.findAll(“span”, attrs={“class”: “title”})

python爬虫原理及源码解析(入门)

分页扒取数据

在跳转下一页时观察 请求行的变化

python爬虫原理及源码解析(入门)

可以看出多了 start=75 的请求参数,此请求参数不同则跳转的分页页面也不同

然后就是for循环遍历了,敲几遍很好理解文章来源地址https://www.toymoban.com/news/detail-423812.html

到了这里,关于python爬虫原理及源码解析(入门)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 38.Python从入门到精通—Python3 XML 解析 什么是 XML Python 对 XML 的解析

    XML(可扩展标记语言)是一种用于描述数据的标记语言,它可以用于表示各种类型的数据,包括文本、图像、音频、视频等。XML 的语法类似于HTML,但它更加灵活,可以自定义标记,并且不依赖于任何特定的应用程序或操作系统。 XML的基本结构由元素、属性和文本组成。元素

    2024年04月11日
    浏览(38)
  • python pytorch 超详细线性回归原理解析加代码实现-小白入门级

    答应老师做的一个系列教程,也是头一次花这吗大精力去写一篇基础的文档,里面虽然有不少的公式,但只要能顺着看下来会发现都是非常基础的公式都是特别简单的。 学习目标: 了解深度学学习的结构基本过程和原理 模型(函数): f ( x ) = w x + b f(x)=wx+b f ( x ) = w x + b 数据集

    2024年02月02日
    浏览(42)
  • 项目总面试技巧,利用Selenium模拟浏览器进行爬虫,解析底层原理

    count = 0 def getCommentList(): global count try: commentList = driver.find_elements_by_css_selector(‘div.reply-content’) for comment in commentList: content = comment.find_element_by_tag_name(‘p’) print(content.text) count = count + 1 return commentList except: return None def clickMoreButton() - bool: try: moreButton = driver.find_element_by_css_se

    2024年04月17日
    浏览(38)
  • 爬虫入门到精通_基础篇1(爬虫基本原理讲解, Urllib库基本使用)

    发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。

    2024年01月23日
    浏览(42)
  • 【源码解析】Mybatis执行原理

    MyBatis 是一款优秀的持久层框架,MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 Mybatis中的mapper接口并没有具体实

    2024年02月16日
    浏览(34)
  • SpringMVC底层原理源码解析

    SpringMVC的作用毋庸置疑,虽然我们现在都是用SpringBoot,但是SpringBoot中仍然是在使用SpringMVC来处理请求。 我们在使用SpringMVC时,传统的方式是通过定义web.xml,比如: 我们只要定义这样的一个web.xml,然后启动Tomcat,那么我们就能正常使用SpringMVC了。 SpringMVC中,最为核心的就是

    2024年02月05日
    浏览(45)
  • RocketMq消费原理及源码解析

      先简单说下常见的rocketMq的部署方式,上图中broker为真正计算和存储消息的地方,而nameServer负责维护broker地   图中右侧consume message部分即是本文重点描述的部分,主要分为ConsumerGroup和Consumer,consumerGroup可以参考 https://rocketmq.apache.org/docs/domainModel/07consumergroup/ 。简单的说,

    2024年02月15日
    浏览(34)
  • axios的原理及源码解析

    关于 axios 的基本使用,上篇文章已经有所涉及,这里再稍微回顾下: 发送请求 请求拦截器 响应拦截器 取消请求 构建一个 Axios 构造函数,核心代码为 request 导出 axios 实例 上述就已经能够实现 axios({ }) 这种方式的请求 下面是来实现下 axios.method() 这种形式的请求 将 Axios.pr

    2024年01月18日
    浏览(77)
  • 【Python】什么是爬虫,爬虫实例

     有s表示加密的访问方式 什么是爬虫 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略 爬虫可以做什么 你可以爬取图片,爬取自己想看的视频

    2024年02月02日
    浏览(89)
  • 网页爬虫逆向与AST入门系列教程(四、AST的应用之代码混淆解析)

    前面的文章中,我们介绍了AST的基本概念、生成和可视化方法。在本篇中,我们将探讨AST在网页爬虫逆向中的另一个重要应用领域:代码混淆解析。 1. 代码混淆与反混淆 代码混淆是一种常见的技术,用于增加网页代码的复杂性和混淆程度,从而防止被不法分析者轻易地理解

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包