【自用】Python爬虫学习(一):爬虫基础与四个简单案例

news2025/2/22 19:43:48

Python爬虫学习(一)

  • 基础知识
  • 四个简单的爬虫案列
    • 1.使用urlopen获取百度首页并保存
    • 2.获取某翻译单词翻译候选结果
    • 3.获取某网页中的书名与价格
    • 4.获取某瓣排名前250的电影名称


基础知识

对于一个网页,浏览器右键可以查看页面源代码,但是这与使用开发者工具的检查看到的结果不一定相同。
在这里插入图片描述

  • 服务器渲染:相同则说明应该是服务器渲染,在页面看到的数据,源代码中就有,服务器将所有数据一并发送给客户端。只需要对网页进行请求,获得页面数据后对感兴趣内容进行数据解析即可。
  • 客户端渲染:不一样则说明应该是客户端渲染,右键看到的页面源代码只是简单的html框架,数据信息是服务器单独再次发送,经客户端注入重新渲染的结果。

想要获取第二种类型的网页数据,需要用到浏览器的抓包工具。
如下所示,页面中含有“美丽人生”,但右键查看页面源代码,使用Ctrl+F搜索却没有该文本,说明该网页应该就属于第2种类型,即客户端渲染。
在这里插入图片描述
那么包含“美丽人生”的文本在哪里呢?在该页面右键点击最下面的检查,或者直接按F12键打开开发者工具。
在这里插入图片描述
依次点击左侧红色方框中的条目内容,查看右侧预览信息,发现第二个就应该是我们需要的内容,其中就有“美丽人生”的文本。
在这里插入图片描述
确定好之后,点击右侧的标头,目前需要关注这几个部分的信息。
在这里插入图片描述
编写代码尝试获取预览的数据信息

import requests

url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'

herders = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'
}

resp = requests.get(url=url, headers=herders)

print(resp.text)

运行结果:
在这里插入图片描述
可以看到,已经获取到预览中看到的所有数据,但略显杂乱,后续只需要对该部分内容进行感兴趣提取就行,显然这是python基础,与爬虫无关了,毕竟已经获取到了数据。

例如,只获取电影名称与评分,示例代码如下:

import requests

url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'

herders = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'
}

resp = requests.get(url=url, headers=herders)
content_list = resp.json()

for content in content_list:
    movie_name = content['title']
    movie_score = content['score']
    print(f'《{movie_name}》, 评分:{movie_score}')

运行结果:
在这里插入图片描述

四个简单的爬虫案列

1.使用urlopen获取百度首页并保存

from urllib.request import urlopen

resp = urlopen('http://www.baidu.com')

with open('baidu.html', mode='w', encoding='utf-8') as f:
    f.write(resp.read().decode('utf-8'))

2.获取某翻译单词翻译候选结果

在这里插入图片描述

参考源码:

import requests

url = 'https://fanyi.baidu.com/sug'

name = input('请输入你要查询的单词:')
data = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0',
    'kw': name
}

resp = requests.post(url, data=data)

fanyi_result = dict(resp.json()['data'][0])['v']
print(fanyi_result)

resp.close()

3.获取某网页中的书名与价格

在这里插入图片描述
参考源码:

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}
url = "http://books.toscrape.com/"
response = requests.get(url=url, headers=headers)
if response.ok:
    response = requests.get("http://books.toscrape.com/")
    print(response.status_code)  # 状态代码,200为请求成功
    content = response.text
    # 参数"html.parser"表明解析的是html
    soup = BeautifulSoup(content, "html.parser")

    # 获取网站中书本的价格信息:根据属性查找对应的p标签,返回的结果为可迭代对象
    all_prices = soup.find_all("p", attrs={"class": "price_color"})
    # print(list(all_prices))
    print("=====书本价格:=====")
    for price in all_prices:
        # 利用price.string可以只保留html标签中的文本内容,再利用字符串的切片得到价格
        print(price.string[2:])
    print("=====书本名称:=====")
    # 获取网站中书名信息
    all_titles = soup.find_all("h3")
    for title in all_titles:
        all_links = title.findAll("a")
        for link in all_links:
            print(link.string)

    response.close()
else:
    print("请求失败")

4.获取某瓣排名前250的电影名称

在这里插入图片描述
参考源码:

import requests
from bs4 import BeautifulSoup

# 获取豆瓣排名前250的电影名称

# 浏览器标识
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}

i = 1
for start_num in range(0, 250, 25):
    # print(start_num)

    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    # print("服务器响应状态码:", response.status_code)
    response.encoding = "UTF-8"  # 指定字符集

    if response.ok:  # 如果服务器响应正常执行下面代码
        douban_top250_html = response.text
        soup = BeautifulSoup(douban_top250_html, "html.parser")

        # all_titles = soup.find_all("span", attrs={"class": "title"})
        all_titles = soup.find_all("span", class_="title")  # 两种写法效果都一样

        for title in all_titles:
            title_string = title.string
            if "/" not in title_string:
                print(f"{i}:\t《{title.string}》")
                i = i + 1
    else:
        print("请求失败!")

    response.close()

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

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

相关文章

通过xshell使用密钥连接阿里云服务器

目录 步骤1:创建密钥对 步骤2:连接服务器 步骤3:连接服务器 连接阿里云服务器有几种方式,例如有密码进行连接,但是密码连接安全风险较大,所以我们选择密钥方式进行连接。操作简单且安全性高 步骤1&…

Element-plus中的el-input无法输入空格和Enter事件无法触发问题

摘要 因为在项目中经常遇到但是又经常忘记是什么原因&#xff0c;记录一下留着自用。 原因&#xff1a;在 el-input 外层包了一层 el-tooltip 导致的。 解决&#xff1a;设置 el-tooltip 的 trigger-keys 属性为空数组&#xff0c;<el-tooltip v-bind"$tooltipConfig&…

【测评】最好用的素材管理软件?3素材管理神器简单对比丨eagle、billfish、千鹿设计助手总有一款适合你

当电脑中的文件堆积如山&#xff0c;寻找特定素材变得耗时费力时&#xff0c;一款优秀的素材管理软件就显得尤为重要。本文将为您介绍三款备受推崇的素材管理工具&#xff1a;Eagle、Billfish和千鹿设计助手&#xff0c;它们各具特色&#xff0c;能有效提升您的工作效率。 今天…

26-原理图的PDF的输出

1. 2.输出完成后&#xff0c;查看

UDP协议与TCP协议的具体区别

在网络通信中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;它们负责将数据从发送端安全、高效地传输到接收端。UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;作为两种最基础的传输层协议&#xff0c;各自在不同的应用场景中…

力扣45:跳跃游戏2题解

题目链接&#xff1a; https://leetcode.cn/problems/jump-game-ii/description/?envTypestudy-plan-v2&envIdtop-100-liked 参考的代码随想录里面的题解&#xff1a; 题目 难度 中等&#xff0c;标的是中等难度&#xff0c;而且我之前做过这道题&#xff0c;但是我没写…

LoRA微调大语言模型Bert

LoRA是一种流行的微调大语言模型的手段&#xff0c;这是因为LoRA仅需在预训练模型需要微调的地方添加旁路矩阵。LoRA 的作者们还提供了一个易于使用的库 loralib&#xff0c;它极大地简化了使用 LoRA 微调模型的过程。这个库允许用户轻松地将 LoRA 层添加到现有的模型架构中&am…

springBoot整合xxl-job开箱即用

一、搭建xxl-job任务调用中心 1. 下载地址&#xff1a; xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 git拉取后&#xff0c;本地打开&#xff0c;并进…

haproxy总结与实验

一、负载均衡 1.1 简述负载均衡 在高并发的业务场景下&#xff0c;解决单个节点压力过大&#xff0c;导致Web服务响应过慢&#xff0c;特别是严重的情况下导致服务瘫痪&#xff0c;无法正常提供服务的问题&#xff0c;而负载均衡的目的就是为了维护系统稳定可靠。负载均衡&…

汽车补光照明实验太阳光模拟器光源

汽车补光照明实验概览 汽车补光照明实验是汽车照明领域的一个重要环节&#xff0c;它涉及到汽车照明系统的性能测试和优化。实验的目的在于确保汽车在各种光照条件下都能提供良好的照明效果&#xff0c;以提高行车安全。实验内容通常包括但不限于灯光的亮度、色温、均匀性、响应…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满&#xff0c;几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代&#xff0c;AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现&#xff0c;同样值得业界关注&…

洛谷P3919 【模板】可持久化线段树 1(可持久化数组)

目录 tags中文题面思路代码 tags 线段树 主席树 中文题面 如题&#xff0c;你需要维护这样的一个长度为 N 的数组&#xff0c;支持如下几种操作 在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值此外&#xff0c;每进行一次操作&#xff08;对于操作…

Mybatis PLUS代码生成器generate

Mybatis PLUS代码生成器generate 一、2.3版本二、生成代码三、3.5.1版本四、生成代码 一、2.3版本 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>2.3</version> </dep…

Java 随机生成密码包含大写字母、数字、特殊字符且指定长度

一、写在前面 现在网络环境越来越复杂&#xff0c;对密码安全要求也越来越严格&#xff0c;在生产环境种&#xff0c;对密码要求是一个不少于16位的随机密码&#xff0c;要求含有大写字母、小写字母、数字、特殊字符中的三种。我们使用java代码直接来可控的生成这种密码。 二…

数字县域+乡村振兴解决方案

1. 国家大数据战略与乡村振兴 国家大数据战略的核心内容包括加快建设数字中国&#xff0c;推动数据资源整合和开放共享&#xff0c;以大数据助力产业转型升级和社会治理创新&#xff0c;构建数字经济&#xff0c;提升国家治理现代化水平。 2. 乡村振兴战略的重大意义 乡村振…

【C++】特殊类设计 — 不能被拷贝的类 , 只能在堆/栈上创建对象的类 ,不能被继承的类

苟活者在淡红的血色中&#xff0c;会依稀看见微茫的希望&#xff1b; 真的猛士&#xff0c;将更奋然而前行。 --- 鲁迅 --- toc 1 特殊类 在实践中&#xff0c;常常会有一些比较有意思的特殊场景&#xff1a; 不能被拷贝的类 - 独一无二的魔法宝物&#xff1a; 在一个角色…

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试 文章目录 【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试1.简介2.验证用例3.指令代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 借助上一篇文章所提及的验证环境&#xff0c;…

对象引用对于非静态的字段、方法或属性是必需的

CS0120 对象引用对于非静态的字段、方法或属性“Person.FirstName”是必需的 类Person internal class Person{// public static string FirstName { get;set; }"sss";public string FirstName { get; set; } "sss";public static string MiddleName …

k8s挂载nginx配置文件

文章目录 步骤一&#xff1a;启动指定服务的工作负载时&#xff0c;指定需要挂载的配置文件&#xff0c;替换工作负载内置的配置文件步骤二: 在配置字典中新增配置文件步骤三&#xff1a;自定义挂载的配置文件 步骤一&#xff1a;启动指定服务的工作负载时&#xff0c;指定需要…