Python 爬虫之简单的爬虫(一)

爬取网页上所有链接


文章目录

  • 爬取网页上所有链接
  • 前言
  • 一、基本内容
  • 二、代码编写
    • 1.引入库
    • 2.测试网页
    • 3.请求网页
    • 4.解析网页并保存
  • 三、如何定义请求头?
  • 总结


前言

最近也学了点爬虫的东西。今天就先给大家写一个简单的爬虫吧。循序渐进,慢慢来哈哈哈哈哈哈哈哈哈哈哈


一、基本内容

主要是以下几部分(下文基本会按照这个步骤来写):

  • 导入需要的库
  • 要测试的网页
  • 生成代理,请求网页
  • 请求成功,解析网页,找到并保存想要的东西
  • 请求失败,返回相应状态码

二、代码编写

1.引入库

代码如下:

import requests
from bs4 import BeautifulSoup

requests: 这是一个非常流行的 Python 库,用于发送 HTTP 请求。它可以方便地让我们获取网页内容、下载文件、提交表单等网络操作。

BeautifulSoup: 这是一个用于解析 HTML 和 XML 文档的 Python 库。它能够将复杂的HTML文档转换成树形结构,使得我们可以轻松地搜索、遍历和修改文档中的元素。


2.测试网页

代码如下:

# 目标网页地址
url = 'http://www.santostang.com/'

3.请求网页

代码如下:

# 定义请求头的浏览器代理,伪装成浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome''/114.0.5735.289 Safari/537.36','host': 'www.santostang.com'}# 请求网页
response = requests.get(url, headers=headers)
print(response.text)

请求头header提供了关于请求、相应或其他发送实体的信息。总之一句话,这个很重要不能少。

不清楚这个请求头怎么搞的不要担心,下面我会另起一章节告诉大家怎么弄。

response.text 的内容如下图(下面会从这个里面检索获取我们想要的信息):

在这里插入图片描述


4.解析网页并保存

代码如下:

# 状态码为200,请求成功
if response.status_code == 200:# 打印状态码print('Status Code: ', response.status_code)# 解析 HTML 文档soup = BeautifulSoup(response.text, 'html.parser')# 找到所有的 <a>, <img> 和 <form> 标签elements = soup.find_all(['a', 'img', 'form'])# 打开一个文本文档并写入with open('url.text', 'w', encoding='utf-8') as f:# 打印每个元素的 href、src 或 action 属性for element in elements:if element.name == 'a':link = element.get('href')elif element.name == 'img':link = element.get('src')elif element.name == 'form':link = element.get('action')if link is not None:# 每写入一个链接另起一行f.write(link + '\n')else:# 请求未成功,返回相应的状态码print(f'Failed to fetch the page with status code {response.status_code}')               

第一步:判断是否请求成功,成功则进行下一步,失败则返回相应的状态码。
第二步:先解析解析 HTML 文档(response.text)。
第三步:找到所有链接前面的标签都有啥。
第四步:根据标签定位到相应的链接,获取它们。
第五步:判定标签后面的不为空,写入这些链接。

下面是本人测试的效果图:

在这里插入图片描述


三、如何定义请求头?

很简单。首先,随便打开一个网页。然后按一下F12,接着按照下图上的步骤一步一步来,就可以得到想要的东西。
在这里插入图片描述


总结

这样,一个简单的爬虫小程序就搞定了。慢慢来吧,后续教大家爬一些有用的东西(# ^ . ^ #)。

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

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

相关文章

Linux 操作系统 006-操作系统的启动与关闭

Linux 操作系统 006-操作系统的启动与关闭 本节关键字&#xff1a;Linux、操作系统的启动与关闭、运行级别 本节相关指令&#xff1a;shutdown、reboot、sync、init、man、help 关机/重启 命令说明shutdown -h now立即进行关机shutdown -h 11分钟后关机shutdown -r now现在重…

基于JNI 实现 嵌套 List 类型参数解析

基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中&#xff0c;我们总结了Java 调用 C/C SDK 的几种方案&#xff0c;分享了JNI在实践过程中的一些踩坑点&#xff0c;而在这篇文章将继续分享针对Java List类型及其嵌套类型&#xff0c;我们的JNI如何接…

thingsboard mac docker install 安装

本文将介绍单机运行thingsboard的方法 1.安装docker与docker-compose 略 2.新建目录 新建任意一个目录&#xff0c;这将影响之后的docker容器组的命名 3.编辑yml文件 vi docker-compose.yml输入以下内容 version: 2.2 services:mytb:restart: alwaysimage: "things…

MCU中断嵌套风险

单片机中断嵌套是指在处理一个中断时&#xff0c;另一个中断发生&#xff0c;CPU会暂停当前中断的处理&#xff0c;转而去处理新的中断。当新的中断处理完毕后&#xff0c;CPU会回到之前的中断继续处理。这种方式称为中断嵌套。 在单片机中&#xff0c;中断嵌套可以通过以下步…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

计算机毕业设计 基于SpringBoot的二手物品交易管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

git代码管理学习文档

1.版本控制 每一版本都会发生变化 更新版本&#xff0c;回退版本 版本控制实际就是控制文件的变化 服务器端和每个人的电脑上都会记录版本的变化&#xff0c;也就是说整个团队都记录了版本的变化。 不需要连网&#xff0c;他是分布式的&#xff0c;在自己电脑上也可以操作。 …

centos离线安装mosquitto

1.x86_64架构centos7操作系统mosquitto包 本次真正要安装的机器是x86_64架构的AMD Ryzen 3 &#xff0c;操作系统是centos7 先找一台能联网的centos7机器 添加 EPEL 软件库 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm下载rpm包 …

[AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅

作为一位Java大师&#xff0c;我始终追求着技术的边界&#xff0c;最近我将目光聚焦在大数据领域。在这个充满机遇和挑战的领域中&#xff0c;我深入研究了Hadoop、HDFS、Hive和Spark等关键技术。本篇博客将从"是什么"、"为什么"和"怎么办"三个角…

《PySpark大数据分析实战》-12.Spark on YARN配置Spark运行在YARN上

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

Rabbitmq消息重复消费问题(幂等性保障)

消息百分百投递架构 在《消息可靠性保证》篇章中&#xff0c;我通过生产者确认机制保障了消息会发送到MQ中&#xff0c;但是在生产者与MQ建立过程的时候出现了网络抖动&#xff0c;连接建立失败&#xff0c;生产者就感知不到MQ返回的ack/nack&#xff0c;无法完全保障消息投递…

modbus 通信协议介绍与我的测试经验分享

1、简介 Modbus 协议是一种通信协议&#xff0c;用于工业自动化系统中的设备间通信。该协议最初由 Modicon 公司开发&#xff0c;并于 1979 年发布。 Modbus 协议通过串行通信格式进行通信&#xff0c;在物理层上支持 RS-232、RS-422 和 RS-485 等多种通信方式。在协议层面&am…

javaEE -16(3000字 HTML5 入门级教程)

一&#xff1a;什么是HTML5 HTML5 是新一代的 HTML 标准&#xff0c;2014年10月由万维网联盟&#xff08; W3C &#xff09;完成标准制定。 官网地址&#xff1a; W3C 提供&#xff1a; https://www.w3.org/TR/html/index.htmlWHATWG 提供&#xff1a;https://whatwg-cn.git…

Kotlin ArrayList类型toTypedArray转换Array

Kotlin ArrayList类型toTypedArray转换Array data class Point(val x: Float, val y: Float)fun array_test(points: ArrayList<Array<Point>>) {points.forEachIndexed { idx, ap ->ap.forEach {print("$idx $it ")}println()} }fun main(args: Arra…

verilog语法进阶-分布式ram原语

概述 官方提供的原语 RAM16X1S_1 #(.INIT(16h0000) // Initial contents of RAM) RAM16X1S_1_inst (.O(O), // RAM output.A0(A0), // RAM address[0] input.A1(A1), // RAM address[1] input.A2(A2), // RAM address[2] input.A3(A3), // RAM address[3…

setState 函数的接收的参数

在 React 中&#xff0c;setState 函数可以接受两种参数形式&#xff1a; 对象形式&#xff1a; setState(newStateObject);这种形式的 setState 接受一个对象作为参数&#xff0c;对象中包含要更新的状态的键值对。React 会将这个新的状态合并到当前的状态中。 示例&#xff1…

pytest之allure测试报告02:allure具体使用方法

一、allure包含的方法 二、allure使用教程 &#xff08;1&#xff09;用例中写入allure方法 allure.epic("数据进制项目epic") allure.feature("手机号模块feature") class TestMobile:allure.story("杭州的手机号story")allure.title("测…

深拷贝和浅拷贝(js的问题)

深拷贝&#xff1a;修改复制对象&#xff0c;原始对象不会变化浅拷贝&#xff1a;修改复制对象&#xff0c;原始对象也变化 方式&#xff1a; 遍历赋值Object.create()JSON.parse()和JSON.stringify() 操作的对象 var obj {a: "Hello",b: {a: "world"…

Selenium安装WebDriver:ChromeDriver与谷歌浏览器版本快速匹配_最新版120

最近在使用通过selenium操作Chrome浏览器时&#xff0c;安装中遇到了Chrome版本与浏览器驱动不匹配的的问题&#xff0c;在此记录安装下过程&#xff0c;如何快速找到与谷歌浏览器相匹配的ChromeDriver驱动版本。 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置…

如何从众多知识付费平台中正确选择属于自己的平台(明理信息科技知识付费平台)

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍明理信息科技知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#…