python-爬虫

2023-11-10

对于自动化办公而言,网络数据的批量获取完数据可以节约相当的时间,因此爬虫在自动化办公中占据了一个比较重要的位置。

Requests简介

Requests是一款目前非常流行的http请求库,使用python编写,能非常方便的对网页Requests进行爬取,也是爬虫最常用的发起请求第三方库。

安装方法:

pip install requests
或者conda安装
conda install requests
re.status_code 响应的HTTP状态码
re.text 响应内容的字符串形式
rs.content 响应内容的二进制形式
rs.encoding 响应内容的编码

试一试对百度首页进行数据请求:

import requests
# 发出http请求
re=requests.get("https://www.baidu.com")
# 查看响应状态
print(re.status_code)
#输出:200
#200就是响应的状态码,表示请求成功
#我们可以通过res.status_code的值来判断请求是否成功。

在这里插入图片描述
res.text 返回的是服务器响应内容的字符串形式,也就是文本内容

例:用爬虫下载孔乙己的文章,网址是https://apiv3.shanbay.com/codetime/articles/mnvdu

我们打开这个网址 可以看到是鲁迅的文章

我们尝试着用爬虫保存文章的内容
re.txt就是网页中的内容,将内容保存到txt文件中

**re.text用于文本内容的获取、下载
在这里插入图片描述
在这里插入图片描述
re.content用于图片、视频、音频等内容的获取、下载

import requests
# 发出http请求
#下载图片
res=requests.get('https://img-blog.csdnimg.cn/20210424184053989.PNG')
# 以二进制写入的方式打开一个名为 info.jpg 的文件
with open('datawhale.png','wb') as ff:
    # 将数据的二进制形式写入文件中
    ff.write(res.content)
    

在这里插入图片描述

re.encoding 爬取内容的编码形似,常见的编码方式有 ASCII、GBK、UTF-8 等。如果用和文件编码不同的方式去解码,我们就会得到一些乱码。

HTML解析和提取

浏览器工作原理:

向浏览器中输入某个网址,浏览器回向服务器发出请求,然后服务器就会作出响应。其实,服务器返回给浏览器的这个结果就是HTML代码,浏览器会根据这个HTML代码将网页解析成平时我们看到的那样

比如我们来看看百度的html页面

import requests
res=requests.get('https://baidu.com')
print(res.text)

将会看到很多带有标签的信息

**HTML(Hyper Text Markup Language)**是一种超文本标记语言,是由一堆标记组成。

例如

<html>
  <head>
    <title>我的网页</title>
  </head>
  <body>
    Hello,World
  </body>
</html>

上面即为一个最简单的html,我们所需要的信息就是夹在标签中

想对html有根据深入的了解,可以html菜鸟教程

https://www.runoob.com/html/html-tutorial.html

那么我们如何解析html页面呢?

BeautifulSoup简介

我们一般会使用BeautifulSoup这个第三方库

安装方法:

pip install bs4
或
conda install bs4

我们来解析豆瓣读书 Top250

它的网址是:https://book.douban.com/top250

import io
import sys
import requests
from bs4 import BeautifulSoup
###运行出现乱码时可以修改编码方式
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
###
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
res = requests.get('https://book.douban.com/top250', headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
print(soup)

python 打印信息时会有限制 我们将打印的编码改成gb18030

headers表示我们的请求网页的头,对于没有headers的请求可能会被服务器判定为爬虫而拒绝提供服务

通过 from bs4 import BeautifulSoup 语句导入 BeautifulSoup

然后使用 BeautifulSoup(res.text, lxmlr’) 语句将网页源代码的字符串形式解析成了 BeautifulSoup 对象

解析成了 BeautifulSoup 对象可以较为方便的提取我们需要的信息
在这里插入图片描述
那么如何提取信息呢?

BeautifulSoup 为我们提供了一些方法

find()方法find_all()方法

  • find() 返回符合条件的首个数据
  • find_all() 返回符合条件的所有数据
import io
import sys
import requests
from bs4 import BeautifulSoup
#如果出现了乱码报错,可以修改编码形式
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
#
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
res = requests.get('https://book.douban.com/top250', headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
print(soup.find('a'))
#<a class="nav-login" href="https://accounts.douban.com/passport/login?source=book" rel="nofollow">登录/注册</a>
print(soup.find_all('a'))
#返回一个列表 包含了所有的<a>标签

除了传入 HTML 标签名称外,BeautifulSoup 还支持熟悉的定位

# 定位div开头 同时id为'doubanapp-tip的标签
soup.find('div', id='doubanapp-tip')
# 定位a抬头 同时class为rating_nums的标签
soup.find_all('span', class_='rating_nums')
#class是python中定义类的关键字,因此用class_表示HTML中的class

HTML定位方法:https://www.cnblogs.com/bosslv/p/8992410.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-爬虫 的相关文章

  • c++代码的编译

    1 gcc和g 1 1搞清楚几个名字 GCC GNU Compiler Collection GUN编译套件 可以编译c c java objective c Fortran等语言 gcc GCC中的 GUN C Compiler C 编译
  • GCC学习

    GCC的学习 图片来源于牛客项目课程 备注 1 默认Ubuntu 没有安装GCC 安装需要一定时间 2 gcc编译c文件 g 编译c 文件 3 ctrl l 清空命令行 gcc 介绍 优点 跨平台 支持 多软件平台和硬件平台 软件平台支持
  • KEIL编译器设置RAM数据复位后不被初始化数据

    第一种 编译器设置 这样设置RAM2 前提是你的RAM空间要有0x8200的大小 我只是举一个例子 在用at指定空间就可以了 比如 unsigned char APP MAC 6 attribute at 0x20008000 这样只要不带
  • 多线程编程之二——MFC中的多线程开发

    五 MFC对多线程编程的支持 MFC中有两类线程 分别称之为工作者线程和用户界面线程 二者的主要区别在于工作者线程没有消息循环 而用户界面线程有自己的消息队列和消息循环 工作者线程没有消息机制 通常用来执行后台计算和维护任务 如冗长的计算过
  • Leetcode详解JAVA版

    目录 1 两数之和 14 最长公共前缀 15 三数之和 18 四数之和 19 删除链表的倒数第 N 个结点 21 合并两个有序链表 28 找出字符串中第一个匹配项的下标 36 有效的数独 42 接雨水 43 字符串相乘 45 跳跃游戏 II
  • 五色球搭配

    要求 共有五种不同颜色的小球 每次取出三个不同颜色的小球 求出所有取球方案 include

随机推荐

  • 小明和小红学习都很努力,一直不相上下。这次期末考试,都发挥得不错,考出了自己的水平。请你判断下这次谁考的更好呢?

    题目描述 小明和小红学习都很努力 一直不相上下 这次期末考试 都发挥得不错 考出了自己的水平 请你判断下这次谁考的更好呢 输入 仅一行 两个不相等的整数 都大于等于0 且小于等于100 表示两人的成绩 输出 仅一行 一个整数 表示考得好的成
  • vscode 引用路径的别名设置

    问题描述 在开发过程中 由于模块越来越多 需要建立的文件夹就会越来越多 目录层级越来越深 这样就会导致import引用时极不方便 比如说 如果在开发过程中能够使用某别名来指代根目录或src文件夹 开发过程中引用的文件一般都在src下 达到下
  • Java开发工具IDEA常用配置(自动定位文件位置),助你事半功倍!提高效率

    自动定位到文件位置 IDEA配置自动定位文件位置 设置按钮 gt Always Select Opened File
  • Nacos安装教程(Windows版本、Linux版本、MAC本)

    目录标题 常用指令 启动 终止nacos 访问地址 一 Windows版Nacos安装教程 1 下载 2 访问 3 数据库设置 二 Linux版Nacos安装教程 1 单机模式 用于测试和单机试用 官方文档 下载 Linux上步骤 扩展 配
  • 黑马程序员Linux学习笔记

    1 Linux基础命令 1 1 Linux的目录结构 Linux只有一个顶级目录 称之为 根目录 Windows系统有多个顶级目录 即各个盘符 在Linux系统中 出现在开头的 表示 根目录 出现在后面的 表示 层次关系 1 2 Linux
  • 软件测试问题

    1 假定无法完全测试某一程序 在决定是否应该停止测试时要考虑哪些问题 2 启动Windows计算器程序 输入5 000 5 逗号不能少 观察结果 这是软件缺陷吗 为什么 3 假如测试飞行之类的模拟游戏 精度和准确度哪一个更值得测试 4 有没
  • softirq/tasklet/workqueue的区别

    http hi baidu com unicorndragon blog item 4f9e48ec8545853862d09fdc html 当前的2 6版内核中 有三种可能的选择 softirq tasklet和work queue t
  • selenium对浏览器操作、鼠标操作等总结

    1 控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法 但它也提供了操作浏览器本身的方法 比如浏览器的大小以及浏览器后退 前进按钮等 1 1 控制浏览器窗口大小 在不同的浏览器大小下访问测试站点 对测试页面截图并保存 然后观
  • OPEN-VOCABULARY OBJECT DETECTION VIAVISION AND LANGUAGE KNOWLEDGE DISTILLATION

    通过视觉和语言知识提炼进行开放词汇的物体检测 摘要 我们的目标是推进开放词汇的物体检测 它可以检测由任意文本输入描述的物体 根本的挑战是训练数据的可用性 现有的物体检测数据集只包含数百个类别 而且进一步扩展成本很高 为了克服这一挑战 我们提
  • 线程池状态

    1 RUNNING 接受新的任务 处理等待队列中的任务 2 SHUTDOWN 不接受新的任务提交 但是会继续处理等待队列中的任务 调用线程池的shutdown 方法时 线程池由RUNNING gt SHUTDOWN 3 STOP 不接受新的
  • Ubuntu1604安装ganglia并监控Hadoop/HBase/Spark集群

    ganglia的官方文档没找到 试了很多教程 终于配置成功 不过还有一点小问题没有解决 安装依赖软件apache php rrdtool ganglia需要使用apache服务 rrd服务 php服务 这里安装的是最新的php7 0 sud
  • 好盈电调拆解_拆解一个无刷电机调速器

    最近在研究无刷直流电机驱动 就把手头的一个无刷电机调速器拆开研究一下 SkyWalker 40A 电调是 好赢科技 生产的 最大电流为40A 拆解只需要一把刀划开外面的热缩管就可以了 拆开以后就能看到里面的电路板了 这是块4层板 两颗日本红
  • TV的端口

    TV信号 Audio 指的各种乐音的组合 频带为20Hz 20KHz 是人耳可以听到的范围 普通人可以听到的范围大概 100Hz 16KHz Video 随着科技的发展 视频信号也不断推陈出新 主要体现在数字化和高分辨率方面 AV 复合视频
  • 第21课 微信小程序视频标签显示弹幕

    第21课 微信小程序视频标签显示弹幕 效果图如下 wxml代码如下
  • QT的qRegisterMetaType和qRegisterMetaType

    以下只为自己的问题做个记录 参考理解 qRegisterMetaType使用方法如下 1 注册位置 在第一次使用此类链接跨线程的signal slot之前 一般在当前类的构造函数中进行注册 2 注册方法 在当前类的顶部包含 include
  • 华为OD机试 - 称砝码(Java)

    题目描述 现有n种砝码 重量互不相等 分别为 m1 m2 m3 mn 每种砝码对应的数量为 x1 x2 x3 xn 现在要用这些砝码去称物体的重量 放在同一侧 问能称出多少种不同的重量 输入描述 对于每组测试数据 第一行 n 砝码的种数 范
  • 小程序跳转带参数

    携带参数 pages reg reg wx navigateTo url pages promise promise name pages reg reg 接收参数 onLoad function arg console log sssss
  • Python安装教程步骤2:Windows中创建虚拟环境安装Pytorch并在PyCharm中配置虚拟环境

    python安装教程步骤2 windows中Anaconda创建虚拟环境安装pytorch并在pycharm中使用虚拟环境 作者介绍 windows中Anaconda创建虚拟环境安装pytorch 1 添加镜像源 2 创建虚拟环境 3 进入
  • SVN 客户端 设置上传过滤文件类型和文件夹

    第一步 编辑SVN 全局配置 修改如下内容 global ignores o lo la al libs so so 0 9 a pyc pyo class target target classpath project settings
  • python-爬虫

    对于自动化办公而言 网络数据的批量获取完数据可以节约相当的时间 因此爬虫在自动化办公中占据了一个比较重要的位置 Requests简介 Requests是一款目前非常流行的http请求库 使用python编写 能非常方便的对网页Request