python爬虫--网页代码抓取

我回来了。

目录

  • 前言
  • 一、爬虫是什么?
  • 二、使用步骤
  • 代码讲解
    • 第一版
    • 第二版
    • 第三版
  • 总结


前言

爬虫,第一章


一、爬虫是什么?

爬虫是指一种自动化程序,通常被用于互联网上的数据采集。这些程序会模拟人类用户的行为,通过访问网页、抓取数据、分析内容等方式来收集网络上的信息。爬虫通常被用于搜索引擎索引、数据挖掘、信息监控、网站更新等领域。它们可以帮助用户快速获取大量的信息,

二、使用步骤

也就10行。
代码如下(示例):

import requests
from faker import Faker

fake = Faker()
url = "https://www.freebuf.com"
headers = {
    "User-Agent": fake.user_agent()
}
response = requests.get(url, headers=headers)
print(response.text)

让我们运行一下
在这里插入图片描述
报错了,,让我们看下信息

 raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.freebuf.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1002)')))

哦,是SSL 证书验证失败导致的,那怎么解决

  1. 确保Python 版本和相关的库都是最新的,有时候问题可以通过升级解决。

  2. 在使用 requests.get() 时,可以设置 verify 参数为 False,这样可以跳过 SSL 证书验证。例如:
    response = requests.get(url, headers=headers, verify=False)

  3. 更新你的 SSL 证书。有时候问题是由于过期的证书引起的,更新证书可能会解决问题。

  4. 确保你的网络环境没有被代理或防火墙篡改,有时候这些因素也会导致 SSL 验证失败。

我都懒得弄,我就选择第二个,改好了,运行一下
在这里插入图片描述
在这里插入图片描述
可能就有人抱怨了,“还要在代码里输入网址”,这个怎么解决,熟悉python的知道应该用input函数。请看第二版

import requests
from faker import Faker

fake = Faker()
url = input("请输入要访问的网站URL:")
headers = {
    "User-Agent": fake.user_agent(),
}
response = requests.get(url, headers=headers, verify=False)
print(response.text)

运行一下
在这里插入图片描述
怎么又出问题啊,好像是对我进行了一些重定向和cookie设置,可能是为了阻止爬虫或恶意访问,换网站
在这里插入图片描述
可能还有人就抱怨了,抓到的代码第二天就没了,然后就就就出现了第三版

import requests
from faker import Faker
import os

fake = Faker()
url = input("请输入要访问的网站URL:")
headers = {
    "User-Agent": fake.user_agent(),
}
response = requests.get(url, headers=headers, verify=False)
output_text = response.text

# 询问用户是否要将输出结果写入文件
create_file = input("是否要保存输出结果?(y/n):")

if create_file.lower() == "y":
    desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
    file_path = os.path.join(desktop_path, 'output.txt')
    with open(file_path, 'w',encoding='utf-8') as file:
        file.write(output_text)
    print(f"输出结果已写入文件 {file_path}")
else:
    print(output_text)

ok,运行一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功了

代码讲解

第一版

import requests
from faker import Faker

fake = Faker()
url = "https://www.freebuf.com"
headers = {
    "User-Agent": fake.user_agent()
}
response = requests.get(url, headers=headers)
print(response.text)

requests 库和 faker 库。requests 库用于发送 HTTP 请求,而 faker 库用于生成虚假的数据。

首先,我们导入了 requests 和 Faker 库。然后,我们创建了一个 Faker 实例并初始化了一个 URL 变量,该变量存储了要发送请求的网站 URL。接着,我们创建了一个名为 headers 的字典变量,其中包含了 User-Agent 的值,该值是使用 Faker 生成的一个随机的用户代理信息。最后,我们使用 requests 库发送了一个 GET 请求,并在请求中包含了我们创建的 headers。最终,我们打印出了请求得到的响应文本。

第二版

import requests
from faker import Faker

fake = Faker()
url = input("请输入要访问的网站URL:")
headers = {
    "User-Agent": fake.user_agent(),
}
response = requests.get(url, headers=headers, verify=False)
print(response.text)

requests库从用户输入的URL获取网页内容,并使用Faker库生成一个随机的User-Agent。

  1. 首先,导入了requestsFaker库。
  2. 然后,创建了一个Faker对象,用于生成随机数据。
  3. 提示用户输入要访问的网站URL,并将输入的URL存储在url变量中。
  4. 创建了一个headers字典,其中包含一个随机的User-Agent。fake.user_agent()会生成一个有效的User-Agent字符串。
  5. 使用requests.get()函数发起GET请求,传入URL、headers和verify参数。headers参数传递了之前创建的headers字典,verify参数设置为False表示不验证SSL证书。
  6. 获取响应内容,并将响应内容存储在response变量中。
  7. 使用print()函数打印响应的文本内容。

第三版

import requests
from faker import Faker
import os

fake = Faker()
url = input("请输入要访问的网站URL:")
headers = {
    "User-Agent": fake.user_agent(),
}
response = requests.get(url, headers=headers, verify=False)
output_text = response.text

# 询问用户是否要将输出结果写入文件
create_file = input("是否要保存输出结果?(y/n):")

if create_file.lower() == "y":
    desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
    file_path = os.path.join(desktop_path, 'output.txt')
    with open(file_path, 'w',encoding='utf-8') as file:
        file.write(output_text)
    print(f"输出结果已写入文件 {file_path}")
else:
    print(output_text)

主要功能是获取用户输入的URL,并从该URL获取网页内容。生成一个随机的User-Agent,并询问用户是否要将输出结果写入文件。

  1. 首先,导入了requestsFakeros库。
  2. 创建了一个Faker对象,用于生成随机数据。
  3. 提示用户输入要访问的网站URL,并将输入的URL存储在url变量中。
  4. 创建了一个headers字典,其中包含一个随机的User-Agent。fake.user_agent()会生成一个有效的User-Agent字符串。
  5. 使用requests.get()函数发起GET请求,传入URL、headers和verify参数。headers参数传递了之前创建的headers字典,verify参数设置为False表示不验证SSL证书。
  6. 获取响应内容,并将响应内容存储在output_text变量中。
  7. 使用input()函数询问用户是否要将输出结果写入文件。用户输入的字符串将被转换为小写。
  8. 如果用户输入为y,则使用os.path.join()函数创建一个桌面路径,并将其与output.txt连接在一起,以获得文件的完整路径。然后,使用open()函数以写入模式打开文件,并使用write()函数将输出文本写入文件。最后,使用print()函数打印出文件路径。
  9. 如果用户输入为n,则直接打印输出文本。

总结

这是爬虫爬取html代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (12) | 视觉模型可视化与可解释性(Visualizing and Understanding)

前言 📚 笔记专栏:斯坦福CS231N:面向视觉识别的卷积神经网络(23)🔗 课程链接:https://www.bilibili.com/video/BV1xV411R7i5💻 CS231n: 深度学习计算机视觉(2017&#xf…

【题解 优化dp】 B - Base Station Construction

题目描述: 分析: 当dp状态设定不好的时候,我们不妨从最简单的部分出发 设 f i f_i fi​表示必须在第i个点建设基站,并且i号点之前的线段全部满足要求时所需要的最小代价 为什么这么设呢? 这道题想要入手,…

数据结构Java版(2)——栈Stack

一、概念 栈也是一种线性数据结构,最主要的特点是入栈顺序和出栈顺序是相反的,操作时只能从栈顶进行操作,在Java中给我们提供了一个泛型栈——Stack,其中最常用的方法有: void push(E):进栈E pop():退栈E peek():查看…

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Collection接口和Map接口 Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了单列集合,它包含了一组…

并发编程知识点梳理

并发编程 在了解并发编程基本知识,先了解几本书,方便学习提高,分别为:java编程思想、企业应用架构模式、并发编程实战。 多线程中的设计模式有:Future、Master-Worker、生产者-消费者。 本次课程分为以下几部分进行…

js - - - - - getSelection 对光标和选区的操作

window.getSelection getSelection示例代码属性方法 getSelection 官方MDN地址 示例代码 <template><div>这里是一段默认的文字内容</div> </template> <script> export default {name: "Home",mounted() {document.addEventListen…

在PyCharm中创建Flask项目

在 PyCharm 中创建 Flask 项目的步骤如下&#xff1a; 打开 PyCharm&#xff0c;并选择 "Create New Project"&#xff08;新建项目&#xff09;。在弹出的窗口中&#xff0c;选择左侧的 "Python" 选项&#xff0c;然后选择右侧的 "Flask" 项目…

iPerf3 使用指南

文章目录 iPerf3 使用指南1 iPerf3 简介2 安装指令2.1 Windows2.2 Linux 3 入门用法4 进阶用法4.1 启动服务端4.2 TCP 带宽测试4.3 UDP 带宽测试 5 iPerf3 命令说明 iPerf3 使用指南 1 iPerf3 简介 iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具。它支持时序、缓冲区、…

快速评估您的IT事件管理实践

您在寻找提高事件响应效率和有效性的方法吗&#xff1f;为什么需要评估IT事件管理&#xff1f; 尽管改进组织的事件管理实践不会一蹴而就&#xff0c;但我们还是要从制定明确的事件响应计划开始。 使用ServiceDesk Plus&#xff0c;快速检查您的事件管理实践是否符合行业标准&a…

SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)

1. 漏洞介绍 SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数&#xff0c;该调用了自定义函数validScript&#xff0c;该函数中用户能够控制 functi…

学习vue3(二)

三、其它 Composition API 1.shallowReactive 与 shallowRef shallowReactive&#xff1a;只处理对象最外层属性的响应式&#xff08;浅响应式&#xff09;。 shallowRef&#xff1a;只处理基本数据类型的响应式, 不进行对象的响应式处理。 什么时候使用? 如果有一个对象数…

1. SpringBoot3 基础

文章目录 1. SpringBoot 概述2. SpringBoot 入门3. SpringBoot 配置文件3.1 SpringBoot 配置文件基本使用3.2 yml 配置文件 4. SpringBoot 整合 Mybatis5. Bean 管理5.1 Bean 扫描5.2 Bean 注册5.3 注册条件 6. 组合注解7. 自动配置原理8. 自定义 Starter 1. SpringBoot 概述 …

SpringMVC下半篇之异常处理器及日期转换器

3.异常处理器 如果不加以异常处理&#xff0c;错误信息肯定会抛在浏览器页面上&#xff0c;这样很不友好&#xff0c;所以必须进行异常处理。 3.1.异常处理思路 系统的dao、service、controller出现都通过throws Exception向上抛出&#xff0c;最后由springmvc前端控制器交由…

VBA窗体跟随活动单元格【简易版】(2/2)

上一篇博客&#xff08;文章连接如下&#xff09;中使用工作表事件Worksheet_SelectionChange实现了窗体跟随活动单元格的动态效果。 VBA窗体跟随活动单元格【简易版】(1/2) 为了在用户滚动工作表窗体之后仍能够实现跟随效果&#xff0c;需要使用Application.Windows(1).Visibl…

【Docker】在Windows操作系统上安装Docker

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

VUE--组件通信(父子)

1、什么是组件通信 组件通信就是指组件与组件之间的数据传递。因为组件的数据是独立的&#xff0c;无法直接访问其他组件的数据&#xff0c;想获取其他组件的数据&#xff0c;就需要用到组件通信。 2、组件关系分类&#xff08;如图&#xff09; ● 父子关系&#xff08;props…

【Python基础012】列表的用法

列 表 用 于 存 储 任 意 数目、任意类型的数据集合。在 Python 中&#xff0c;用方括号&#xff08;[]&#xff09;来表示列表&#xff0c;并用逗号来分隔其中的元素。 1、创建列表 &#xff08;1&#xff09;基本语法创建 a [] 创建整数列表&#xff1a; a [1, 2, 3, 4] …

Docker 47 个常见故障的原因和解决方法

本文针对Docker容器部署、维护过程中&#xff0c;产生的问题和故障&#xff0c;做出有针对性的说明和解决方案&#xff0c;希望可以帮助到大家去快速定位和解决类似问题故障。 Docker是一种相对使用较简单的容器&#xff0c;我们可以通过以下几种方式获取信息&#xff1a; 1、…

[labelme]labelme如何将标注的json格式转成png的mask文件掩码文件

labelme工具不仅仅具有标注功能&#xff0c;而且可以将json文件转化为png的分割训练文件&#xff0c;如果您是一个类别则可以直接用labelme_json_to_dataset进行转换最后提取对应的掩码文件即可进行语义分割训练。如果您是>2个类别则不推荐使用labelme工具进行转换&#xff…

安卓动态广播

在AndroidManifest.xml文件的<manifest>标签内添加以下权限声明&#xff1a; <uses-permission android:name"android.permission.ACCESS_NETWORK_STATE"/> 这行代码声明了应用程序需要访问网络状态的权限。添加此权限后&#xff0c;应用程序将能够获取…