python之爬虫的学习

news2024/11/27 12:47:33

python爬虫入门-1

  • 为什么要学习爬虫
  • 浏览器背后的秘密
  • 常用网络请求
  • URL解析
  • HTTP常见响应状态码
  • 相关库及其简单使用
  • 相关引用
  • 综合栗子

为什么要学习爬虫

现如今,浏览器可以更方便的进行网页交互以人们适合阅读的方式展示数据;但爬虫或者网页抓取对数据的收集和处理更为卓越,如果我们可以再将这些处理过的数据存储到数据库中,自然也能实现其可视化

浏览器背后的秘密

既然是网络抓取,首先我们要对当我们输入网址后回车,浏览器到底都干了什么:

假设有两台主机A,B;其中A为服务器,B为客户机

  • 首先,B对获得的URL进行DNS解析
    注:DNS解析简单理解就是根据域名去查找相对应的IP地址(A的IP地址)
  • B发送信息(由请求头和消息体组成),该信息包括B的本地路由器MAC地址和A的IP地址
  • B路由器收到B发送的信息,打上自己的IP地址并寄送给A的IP地址
  • 到达A服务器后,读取包裹请求头里的目标数据,传递给对应的应用
  • A服务器上网络服务器应用读取到数据,数据内容大致如下:
    • 这是一个…请求
    • 请求index.html
  • 网络服务器找到对应的html文件,把它打包发给B,经过B的本地路由器传给B,B电脑的浏览器就显示出了相关网页

注:用户可以理解为两个人之间发微信,首先B要拿手机找到A微信号然后再通过手机(“路由器”)发出去,然后A看到了回给B

常用网络请求

在这里插入图片描述
爬虫中最常使用的是GET和POST,故不对其他三种做介绍,感兴趣可自行查阅相关文档。

  • GET——人们日常在浏览器中输入相关URL后页面展示即为最常见的一个GET请求
    在这里插入图片描述

  • POST——人们进行用户登录注册/使用在线翻译功能/使用搜索引擎搜索时候即是一个简单的POST请求
    在这里插入图片描述

注:edge浏览器开发模式的快捷键是F12,然后添加上网络即可;若出现网络无内容显示,尝试刷新网页即可

URL解析

URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

  • scheme——协议;如http、https、ftp
  • host——服务器IP地址或域名;例如www.baidu.com、192.168.21.138
  • [:port#]——端口号,可省略省略后走默认,默认为80
  • path——访问资源路径
  • query-string——参数,发送给http服务器的数据;常见于数据库参数查询
  • anchor——锚(跳转到网页的指定锚点位置)

下面看几个栗子:
https://cdn.haier.net/assets/bazaar/com_map.json?v20210726
https://www.shulanxt.com/datawarehouse/kettle/kettlefz
https://www.baidu.com/index.html

HTTP常见响应状态码

  • 1xx——信息

    • 100 Continue 仅接受到部分,需用户继续操作
  • 2xx——成功

    • 200 OK 成功
      在这里插入图片描述
  • 3xx——重定向

    • 307 Temporary Redirect 被请求的页面已经临时移至新的url
  • 4xx——客户端错误

    • 400 Bad Request 服务器未能理解请求
    • 401 Unauthorized 被请求的页面需要用户名和密码
    • 403 Forbidden 对被请求页面的访问被禁止,可能是heards信息被屏蔽或者用户IP被该网站屏蔽
    • 404 Not Found 服务器上未找到请求的页面
      在这里插入图片描述
  • 5xx——服务器错误

    • 503 Service Unavailable 请求未完成。服务器临时过载或宕机

相关库及其简单使用

  • Requests

(1) 利用Requests模拟最基本的GET请求

#导入requests
import requests
#模拟get请求
response=requests.get("https://www.baidu.com")
#打印get请求返回内容
print(response.text)

运行效果如下图所示:
在这里插入图片描述(2)利用Requests添加查询参数

import requests
#添加查询参数,数据类型必须为字典
kw={'wd':'长城'}
response=requests.get("http://www.baidu.com/s?",params=kw)

print('返回内容(Unicode编码):')
print(response.text)

print('返回内容(字节流类型):')
print(response.content)

print('完整url地址:')
print(response.url)

print('状态码:')
print(response.status_code)

返回内容如下:

"D:\Python Project\demo\venv\Scripts\python.exe" "D:\Python Project\demo\main.py" 
返回内容(Unicode编码):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>百度安å
¨éªŒè¯</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
    <meta name="format-detection" content="telephone=no, email=no">
    <link rel="shortcut icon" href="https://www.baidu.com/favicon.ico" type="image/x-icon">
    <link rel="icon" sizes="any" mask href="https://www.baidu.com/img/baidu.svg">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    <link rel="stylesheet" href="https://ppui-static-wap.cdn.bcebos.com/static/touch/css/api/mkdjump_c5b1aeb.css" />
</head>
<body>
    <div class="timeout hide">
        <div class="timeout-img"></div>
        <div class="timeout-title">网络不给力,请稍后重试</div>
        <button type="button" class="timeout-button">返回首页</button>
    </div>
    <div class="timeout-feedback hide">
        <div class="timeout-feedback-icon"></div>
        <p class="timeout-feedback-title">问题反馈</p>
    </div>

<script src="https://wappass.baidu.com/static/machine/js/api/mkd.js"></script>
<script src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_db105ab.js"></script>
</body>
</html>
返回内容(字节流类型):
b'<!DOCTYPE html>\n<html lang="zh-CN">\n<head>\n    <meta charset="utf-8">\n    <title>\xe7\x99\xbe\xe5\xba\xa6\xe5\xae\x89\xe5\x85\xa8\xe9\xaa\x8c\xe8\xaf\x81</title>\n    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n    <meta name="apple-mobile-web-app-capable" content="yes">\n    <meta name="apple-mobile-web-app-status-bar-style" content="black">\n    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">\n    <meta name="format-detection" content="telephone=no, email=no">\n    <link rel="shortcut icon" href="https://www.baidu.com/favicon.ico" type="image/x-icon">\n    <link rel="icon" sizes="any" mask href="https://www.baidu.com/img/baidu.svg">\n    <meta http-equiv="X-UA-Compatible" content="IE=Edge">\n    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">\n    <link rel="stylesheet" href="https://ppui-static-wap.cdn.bcebos.com/static/touch/css/api/mkdjump_c5b1aeb.css" />\n</head>\n<body>\n    <div class="timeout hide">\n        <div class="timeout-img"></div>\n        <div class="timeout-title">\xe7\xbd\x91\xe7\xbb\x9c\xe4\xb8\x8d\xe7\xbb\x99\xe5\x8a\x9b\xef\xbc\x8c\xe8\xaf\xb7\xe7\xa8\x8d\xe5\x90\x8e\xe9\x87\x8d\xe8\xaf\x95</div>\n        <button type="button" class="timeout-button">\xe8\xbf\x94\xe5\x9b\x9e\xe9\xa6\x96\xe9\xa1\xb5</button>\n    </div>\n    <div class="timeout-feedback hide">\n        <div class="timeout-feedback-icon"></div>\n        <p class="timeout-feedback-title">\xe9\x97\xae\xe9\xa2\x98\xe5\x8f\x8d\xe9\xa6\x88</p>\n    </div>\n\n<script src="https://wappass.baidu.com/static/machine/js/api/mkd.js"></script>\n<script src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_db105ab.js"></script>\n</body>\n</html>'
完整url地址:
https://wappass.baidu.com/static/captcha/tuxing.html?&logid=11524773033600612710&ak=c27bbc89afca0463650ac9bde68ebe06&backurl=https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%25E9%2595%25BF%25E5%259F%258E&signature=e7acb04e8e0047a1c7c088c65135643b&timestamp=1669116487
状态码:
200

进程已结束,退出代码0

复制打印的完整URL发现,该操作与用户手动在百度搜索框输入长城搜索返回的页面一致
(3)添加headers

import requests
hearders={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"
}

response=requests.get('https://www.linuxcool.com/',headers=hearders)
print(response.content.decode('utf-8'))

User-Agent(用户代理)是网站服务器用来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息

如何寻找User-Agent信息如下视频演示:
在这里插入图片描述
如果遇到403禁止访问,可尝试更改User-Agent

(4)小栗子:利用request实现抓取某个网址整个页面

import requests
response=requests.get('https://www.shulanxt.com/datawarehouse/kettle/kettlefz')
print(response.content.decode('utf-8'))
  • urllib
    (1)urlopen函数使用
# 导入模块
import urllib.request
# url地址
url='https://youku.com/'
#用户代理
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"
}
#模拟一个网页请求
req=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(req)
#打印网页内容以utf-8格式解码
print(response.read().decode("utf-8"))

注意:decode()函数代表解码,encode()是其逆函数因为response.read()返回的编码格式为Unicode故要转为utf-8进行解码以消除乱码

(2)urllib.error模块
- URLError——该错误一般由网络引起
- HTTPError——服务器返回错误状态码,是URLError子类即URLError包括HTTPError

  • BeautifulSoup之find_all
    (1)导入相关库
from bs4 import BeautifulSoup

(2)首先进行一个简单初始化

bs = BeautifulSoup(html.read(), 'html.parser')
html为urlopen赋值给的变量名

html.parser为解析器;除该参数外还有lxml、html5lib;解析器个人理解为中间翻译官以确保能读懂
(3)调用find_all

变量名= bs.find_all('div', {'class':'green'})

该语句会找到抓取页面上包含class="green"属性的div标签的所有内容

注:在此先对三者做简单学习,以后的文章会展开深度讲解有关该三个模块的相关内容

相关引用

  • Python网络爬虫权威指南(第二版)([美]瑞安·米切尔)

综合栗子

爬取优酷页面所有该标签
在这里插入图片描述

# 导入模块
import urllib.request
from bs4 import BeautifulSoup
# url地址
url='https://youku.com/'
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"
}
req=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(req)
bs=BeautifulSoup(response.read(),'html.parser')
Titlename=bs.find_all('a',{'class':'aplus_exp aplus_clk'})
for title in Titlename:
    # get_text函数会去除除文本内的所有内容
    print(title.get_text())

运行结果如下图所示:
在这里插入图片描述

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

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

相关文章

第5章 输入/输出(I/O)管理

5.1 I/O管理概述 5.1.1 I/O设备 I/O设备的分类&#xff08;按使用特性分类&#xff09;I/O设备的分类&#xff08;按传输速率分类&#xff09;I/O设备的分类&#xff08;按信息交换的单位分类&#xff09; 5.1.2 I/O控制方式 有4种&#xff1a; 1. 程序直接控制方式2. 中…

都是同样条件的mysql select语句,为什么读到的内容却不一样?

假设当前数据库里有下面这张表。 老规矩&#xff0c;以下内容还是默认发生在innodb引擎的可重复读隔离级别下。 大家可以看到&#xff0c;线程1&#xff0c;同样都是读 age > 3 的数据。第一次读到1条数据&#xff0c;这个是原始状态。这之后线程2将id2的age字段也改成了3。…

kubelet源码 删除pod(二)

kubelet源码 删除pod&#xff08;二&#xff09; 本文中含有k8s的一个bug&#xff0c;我也正在努力提交PR&#xff0c;不过会不会被merge就不清楚了。 kubernetes PR地址 pod_workers.go是主要处理pod变化的文件&#xff0c;在1.22版本后对这个文件进行了比较大的修改。把属…

[附源码]SSM计算机毕业设计基于SSM的酒店管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

QT 字符串操作常用接口函数

目录常见字符串处理函数空白字符串处理函数查询字符串数据字符串比较字符串的转换QT版本的STLQLinkedList和QVector的区别QT提供的STL命名风格的迭代器QMap和QHash经过该简单设置可以防止msvc环境下使用qdebug打印输出时出现中文乱码的问题。 #include "learn.h" #i…

长话短说:学习网络安全自学好还是报培训班?

无论你是大学生还是在职人员&#xff0c;想学网络安全时&#xff0c;都会面临两个选择&#xff0c;自学或者报班。报班通常太费钱&#xff0c;时间又不自由&#xff1b;自学又不知道如何下手&#xff0c;担心自己坚持不下来。怎么办&#xff1f; 我们先分析一下自学和培训班的…

【文本分类】《融合注意力和剪裁机制的通用文本分类模型》

阅读摘要&#xff1a;   针对实际场景中长短文本大量的情况&#xff0c;提出了双通道注意力机制与长文本裁剪机制来改进文本分类模型&#xff0c;最终提高了精度。 参考文献&#xff1a;   [1] 融合注意力和剪裁机制的通用文本分类模型 参考论文信息 论文名称&#xff1a;《…

第三版全球干旱指数和潜在蒸散数据发布

Robert J. Zomer &#xff1b;JianchuXu&#xff1b;AntonioTrabucco(Kunming Institute of Botany, Chinese Academy of Science&#xff1b;Euro-Mediterranean Center on Climate Change, IAFES Division, Sassari, Italy) 摘要 潜在蒸散(Potential evapotranspiration&…

Linux Shell 自动交互功能实现

1. EOF 多文本输入 需求案例 1 新交付了一批机器&#xff0c;每台机器只分配了一块落盘 &#xff0c;现在根据需求对该盘进行分区并实现挂载&#xff0c;如何实现&#xff1f; 需求分析&#xff1a; 对于一个盘&#xff0c;实现分区挂载到不同目录&#xff0c;通常思路有两…

灯具行业MES解决方案,实现产品的正反向追溯

灯具照明行业产业链主要包括上游原材料、中游照明产品生产及封装、下游照明细分应用领域。产业链上游、中游多为资本密集与技术密集型行业&#xff0c;产品高度标准化&#xff0c;市场相对集中。而产业链下游产品需求相对个性化&#xff0c;多品类、多SKU&#xff0c;市场集中度…

探索性数据分析

有目的性的探索数据集以获取具体的优化方向和思路。 Intuition 探索性数据分析 (EDA) 以了解数据集的信号和细微差别。这是一个循环过程&#xff0c;可以在开发过程的各个阶段&#xff08;标记之前/之后、预处理等&#xff09;完成&#xff0c;具体取决于问题的定义程度。例如&…

【Proteus仿真】【STM32单片机】蔬菜大棚温湿度控制系统设计

文章目录一、主要功能二、硬件资源三、软件设计四、实验现象联系作者一、主要功能 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、DHT11温湿度、蜂鸣器、按键、LED、继电器、电机模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示DH…

setup获取props和自定义事件、通过expose暴露给ref获取属性和方法、setup顶层async、setup返回函数

文章目录1. setup获取props和自定义事件2. 通过expose暴露给ref获取属性和方法3. setup顶层async4. setup返回函数1. setup获取props和自定义事件 child 组件&#xff1a; <template><div><h3>我是child组件 -- {{ title }}</h3><button click&qu…

We have awesome remote U.S. jobs waiting for engineers like you.

发件人&#xff1a;Turing - U.S. Software Jobs <hiringturing.com> Hi I saw your profile online and wanted to reach out! You might be a great fit for many high-paying remote U.S. software engineering opportunities on Turing.com. Turing is based in …

steam搬砖,长期稳定副业,附防坑指南助你不掉坑

大家伙&#xff0c;我是阿阳 今天给大家拆解一个冷门项目&#xff0c;国外steam游戏搬砖项目&#xff0c;这个项目也是自己正在做的第二个项目&#xff0c;虽然冷门&#xff0c;不暴利&#xff0c;做了这么久赚钱一直很稳定。站在一个搞钱人的角度来说&#xff0c;这个项目作为…

Docker部署单节点Kafka

文章目录Docker部署单节点Kafka参考镜像wurstmeister/zookeeper Overviewwurstmeister/kafka Overview部署单Brokerkafka 环境变量&#xff1a;启动与停止命令测试验证&#xff1a;参考文章Docker部署单节点Kafka 参考镜像 wurstmeister/zookeeper Overview docker pull wur…

Hadoop总结——HDFS

一、HDFS概述 1.1 HDFS产生背景 随着数据量越来越大&#xff0c;在一个操作系统管辖的范围内存不下了&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件…

记一次自定义starter引发的线上事故复盘

前言 本文素材来源于业务部门技术负责人某次线上事故复盘分享。故事的背景是这样&#xff0c;该业务部门招了一个技术挺不错的小伙子小张&#xff0c;由于小张技术能力在该部门比较突出&#xff0c;在入职不久后&#xff0c;他便成为这个部门某个项目组的team leader&#xff…

计算机外设:显示器是如何工作的?

本节我们将了解计算机的外设之一&#xff1a;显示器的底层工作原理。通过本节&#xff0c;你会知道电脑显示器是如何实时展示我们在计算机上的操作的&#xff0c;比如显示出一张“E”的字符。最后总结了计算机编程的本质&#xff0c;就是人们是通过设计&#xff0c;让字节代表不…

超迷你机械臂机器人,YYDS

真正的大师,永远都怀着一颗学徒的心&#xff01; 一、项目简介 超迷你机械臂机器人&#xff0c;YYDS 核心板&#xff1a; REF核心板 REF底板&#xff08;机械臂底座里面的控制器电路板&#xff09; 步进电机驱动 Peak示教器 文件&#xff1a; 3D模型设计源文件。 20步进…