走近Python爬虫(上):爬虫的作用和技术、获取网页内容、解析网页内容

news2024/12/26 22:09:41

文章目录

  • 一、绪论
    • 爬虫的作用
    • 爬虫的技术
  • 二、获取网页—requests模块
    • 1.requests模块简单使用
    • 2.使用多线程
  • 三、解析网页
    • 1.XPath
  • 参考

本文是Python爬虫系列博客的第一篇,内容概览如下:

在这里插入图片描述

一、绪论

爬虫的作用

  • 收集数据:

爬虫可用于收集数据,是最常用的使用方法。由于爬虫是程序,运行速度快且不会疲劳,因此使用爬虫获取大量数据变得简单快捷。现在绝大多数网站都基于模板开发,使用模板可快速生成相同版式、不同内容的页面。因此,只需针对一个页面开发爬虫,即可爬取基于同一模板生成的不同页面。这种爬虫称为定向爬虫,也是本博客所讲述的爬虫类型。

  • 尽职调查:

尽职调查是投资人在投资前了解公司是否尽职尽责、是否存在欺诈行为的过程。以往,尽职调查通常通过调查客户或审计财务报表来完成。然而,使用爬虫后,尽职调查变得更加便捷。例如,对于一个电商公司的调查,想要了解其商品销售情况。该公司声称每月销售额数亿元。通过使用爬虫获取该公司网站所有商品的销量情况,可以计算出实际总销售额。此外,还可以爬取所有评论并进行分析,以发现是否存在刷单行为。

  • 刷流量和秒杀:

刷流量是爬虫的天然功能。当爬虫访问网站时,如果成功隐藏身份,网站无法辨别其为爬虫,将视为正常访问。因此,爬虫会无意中增加网站的访问量。除了刷流量,爬虫还可参与各种秒杀活动,如在电商网站上抢购商品、优惠券、机票和火车票等。目前,许多人专门利用爬虫参与活动并从中获利,这被称为"薅羊毛",而从事此类行为的人被称为"羊毛党"。然而,使用爬虫进行盈利的行为实际上处于法律的灰色地带。

爬虫的技术

  • 爬虫实现的关键是:

遇到各种反爬虫问题时,应该如何突破,如何隐藏爬虫,如何模拟人的行为,以及遇到没有见过的反爬虫策略时,应该如何思考及如何使用爬虫爬取非网页内容等。

  • 爬虫的主要目的是:

获取网页内容并解析。只要能达到这个目的,用什么方法都没有问题。关于获取网页,常用的是Python的两个第三方模块,一个是requests,另一个是爬虫框架Scrapy。关于解析网页内容,常见的3种方式——正则表达式、XPath和BeautifulSoup。两种网页获取方式和3种网页解析方式可以自由搭配,随意使用。

  • 反爬虫措施:

由于网站必然不会这么轻易地让人把数据全给拿走,因此很多网站都会采取各种反爬虫措施。常规的反爬虫措施包括但不限于访问频率检查、验证码、登录验证、行为检测。

二、获取网页—requests模块

requests是Python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比Python自带的网络库urllib更加简单、方便和人性化。使用requests可以让Python实现访问网页并获取源代码的功能。

首先,命令行安装requests模块:

pip install request

1.requests模块简单使用

  • get方法:
    import requests
    html_str = requests.get(’网址’).content.decode(‘编码方式’) # 编码方式默认是UTF-8
  • post方法,解析成字符串:

data对象表示查询参数:

    import requests
    data = {'key1': 'value1',
          'key2': 'value2'}
    html_formdata = requests.post(’网址’, data=data).content.decode()
    #用formdata提交数据
  • post方法,解析成json:
    html_json = requests.post(’网址’, json=data).content.decode() #使用JSON提交数据

2.使用多线程

单线程爬虫每次只访问一个页面,不能充分利用计算机的网络带宽。一个页面最多也就几百KB,所以爬虫在爬取一个页面的时候,多出来的网速和从发起请求到得到源代码中间的时间都被浪费了。所以,要使用多线程。

  • 代码示例:
    from multiprocessing.dummy import Pool
    def calc_power2(num):
        return num * num
    pool = Pool(3)
    origin_num = [x for x in range(10)]
    result = pool.map(calc_power2, origin_num)
    print(f’计算0-9的平方分别为:{result}')

三、解析网页

  • 三种方式:
    正则表达式:复杂,效果还不好,可能找不到。
    XPath:能利用HTML的结构性特点,使用更友好。
    Beautiful Soup4(BS4):它是Python的一个第三方库,某些方面比XPath易懂,但是不如XPath简洁,而且速度比XPath慢。

1.XPath

需要先安装lxml,不同操作系统安装方式不同,请自行百度。

  • 代码使用:
    import lxml html
    selector = lxml.fromstring(’网页源代码’)
    info = selector.xpath(’一段XPath语句’)
  • XPath语法:

查找技巧:从内向外一直找到一个有独特的属性值的元素为止,不是非要找到顶层。
Chrome浏览器可以在页面源码上定位到元素后,右键“Copy”→“Copy XPath”。

    //div[@class="useful"]/ul/li/text()

参考

《Python爬虫开发:从入门到实战(微课版)》谢乾坤

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

roboflow标注检测 / 分割数据集

对比了labelme, makesense.ai和roboflow这3个可以标注数据集的工具之后, 总结一下它们的特点: labelme需要配环境安装,标注的结果是json文件,需要转成所需格式。 makesense.ai不需要下载,在线标注,能用来标…

ENSP L2TP Over IPSec

本文拓扑沿用上一篇文章《ENSP L2TP 配置》,相关配置有差异。 拓扑 准备工作 客户端软件:URL 真机网络可以到达LNS10.100.1.254 防火墙上接口划分到相应安全区域,安全策略全开(本文只是测试,现网中根据自己网络情况严格设置安…

Python selenium驱动下载,模块安装以及基本使用

视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们以谷歌浏览器为例讲解。首先我们要去下载谷歌浏览器驱动。 谷歌浏览器驱动下载地址:Chromium History Versions Download ↓ 查看谷歌浏览器版本 右上角三个点 …

SpringCloud之Eureka的学习【详细】

目录 服务架构演变 单体架构 分布式架构 分布式架构需要考虑的问题 微服务 架构比较 微服务技术对比 服务拆分注意事项 案例 服务远程调用 RestTemplate Eureka注册中心 RestTemplate存在的问题 服务调用考虑的问题 Eureka的作用 搭建EurekaServer 服务注册 …

【达梦数据库】数据查询操作(超详细)

文章目录 数据查询1. 单表查询1. 简单查询2. 条件查询总结举例 3. 函数查询常用多行函数常用单行函数1. 字符函数2. 数值函数3. 日期时间函数常用日期型函数举例 4. 转换函数 4. 查询结果排序(order by)参数说明:注意事项: 2. 连接查询1. 交叉连接&#…

0034Java程序设计-基于Java的飞机大战游戏的设计与实现论文

文章目录 摘 要目 录系统设计开发环境 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communication ,第四代移动通信技术)网络的深入,越来越多的IT行业开始向手机行业转移重心…

JVM虚拟机:从结构到指令让你对栈有足够的认识

本文重点 在前面的课程中,我们学习了运行时数据区的大概情况,从本文开始,我们将对一些组件进行详细的介绍,本文我们将学习栈。栈内存主管java的运行,是在线程创建时创建的,它是线程私有的,它的生命周期是跟随线程的生命期,也就是说线程结束栈内存就释放了,对于栈来说…

web:[网鼎杯 2020 青龙组]AreUSerialz

题目 点进题目发现 需要进行代码审计 function __destruct() {if($this->op "2")$this->op "1";$this->content "";$this->process();}这里有__destruct()函数,在对象销毁时自动调用,根据$op属性的值进行…

数据结构与算法:二叉树之“堆排序”

目录 一、树概念及结构 二、二叉树树概念及结构 特殊的二叉树 三、堆的概念及结构 四、堆的创建 1、声明结构体 2、初始化 3、销毁 4、添加新元素 5、交换元素 6、向上调整 7、判断堆是否为空 8、移除堆顶元素 9、向下调整 10、获取堆元素个数 五、使用堆排序…

【网络编程】传输层——UDP协议

文章目录 一、传输层1. 再谈端口号2. 端口号范围划分3. 认识知名端口号4. 两个问题5. netstat 与 pidof 二、UDP协议1. UDP协议格式2. UDP协议的特点3. 面向数据报4. UDP的缓冲区5. UDP使用注意事项6. 基于UDP的应用层协议 一、传输层 传输层 负责负责两台计算机之间的端到端的…

阿里云2023年双11活动时间、活动入口、活动内容详细解读

阿里云2023年双11活动正在火热进行中,双11活动时间,阿里云推出了金秋上云季活动,活动包括满减礼包福利,云产品降价让利,下面给大家整理分享阿里云双11活动时间、活动入口、活动内容,助力大家轻松上云&#…

网络爬虫-Requests库主要方法解析

一、Requests库的7个主要方法 其中,request()是 基础方法,其他6个方法都是基于request()的,但最常用的是get() 和 head() 二、request() 13个访问控制参数: 三、get(): 获取某一个url链接的相关资源 四、head() 五、post() 六、…

LCR 021. 删除链表的倒数第 N 个结点

这篇也是凑数的 .... 描述 : 给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点 题目 : LeetCode 删除链表的倒数第Nge节点 : LCR 021. 删除链表的倒数第 N 个结点 分析 : 首先创建一个虚拟节点(哨兵节点) , 虚拟节点下一节点指向头节…

从 malloc 分配大块内存失败 来简看 linux 内存管理

文章目录 背景Glibc MallocMalloc 分配大块内存失败原因Overcommit_memory 实现OOM (Out Of Memory) 的实现 背景 应用进程 malloc 返回了null,但是观察到的os 的free内存还有较大的余量 ,很奇怪为什么会这样? 不可能是oom导致的&#xff0…

GAMP源码阅读(上)主要类型、后处理流程、RINEX文件读取

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、GAMP 简介1、程序概述2、工具箱介绍3、函数调用关系4、程序执行流程 二、基础类型定义1、宏定义2、结构体定义3、矩阵、向量、最小二乘、卡尔…

以“信”数智,筑“广”生态:亚信科技CEO高念书受邀出席中国广电数字化赋能大会

6月30日,由国家广播电视总局指导、中国广电集团主办的中国广电数字化赋能大会在京召开。国家广播电视总局党组成员、副局长杨小伟,工信部总工程师赵志国,中国移动党组成员、副总经理高同庆等出席会议并致辞,中广电移动网络有限公司…

【ICCV2023】频率成分在少样本学习中的重要性

论文标题:Frequency Guidance Matters in Few-Shot Learning 论文链接:https://openaccess.thecvf.com/content/ICCV2023/html/Cheng_Frequency_Guidance_Matters_in_Few-Shot_Learning_ICCV_2023_paper.html 代码:暂未开源 引用:…

基于SpringBoot的医院后台管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 患者管理 公告信息管理 公告类型管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 四、结论 前言 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理…

[云原生1.] Docker镜像的创建

文章目录 1. Docker镜像概述1.1 简介1.2 镜像结构的分层详解 2. 创建Docker镜像的方法类别2.1 基于已有镜像创建2.1.1 创建流程2.1.2 示例 2.2 基于本地模板创建2.2.1 示例 2.3 基于Dockerfile 创建 3. 联合文件系统(UnionFS)2.1 简介2.2 特性 4. Docker…

云原生-AWS EC2使用、安全性及国内厂商对比

目录 什么是EC2启动一个EC2实例连接一个实例控制台ssh Security groups规则默认安全组与自定义安全组 安全性操作系统安全密钥泄漏部署应用安全元数据造成SSRF漏洞出现时敏感信息泄漏网络设置错误 厂商对比参考 本文通过实操,介绍了EC2的基本使用,并在功…