python爬虫--网页代码抓取

我回来了。

目录

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


前言

爬虫,第一章


一、爬虫是什么?

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

二、使用步骤

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

import requests
from faker import Fakerfake = 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 Fakerfake = 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 osfake = 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 Fakerfake = 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 Fakerfake = 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 osfake = 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代码

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

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

相关文章

归并排序详解

目录 ​💡基本思想 💡图文介绍 💡动图演示 💡过程解释 💡代码实现 💡递归实现 💡非递归实现 💡总结 💡基本思想 归并排序(MERGE-SORT)是…

SpringBoot——纯注解配置的Spring

1.环境搭建 1.1.创建工程 拷贝ssm工程: 1.2.待改造的问题 我们发现,之所以我们现在离不开xml配置文件,是因为我们有一处很关键的配置,如果他要也能用注解配置,那么我们就可以脱离xml文件了: 1.2.1.jdbc…

HCIA的路由协议

动态路由协议/静态路由协议 路由表的加表规则: 当学习到多条路由条目时,先比较优先级,优先级小(优先级大)优先加表,如果优先级一致,比较cost值,cost值小的优先加表,如果…

为什么网上很多人都不推荐新手学习C语言?

今日话题,为什么网上很多人都不推荐新手学习C语言?实际情况并非如此。相反,C语言对于新手来说是一门非常适合入门的编程语言。首先,C语言具有较低的学习曲线。新手只需掌握基本的if-else条件语句和for循环结构,就能开始…

工业设备管理系统:助力企业实现数字化转型

随着工业4.0和智能制造的快速发展,数字化转型已成为企业提升竞争力、适应市场变化的必然选择。工业设备管理系统作为数字化转型的关键组成部分,能够为企业提供实时监控、数据分析、预警和远程控制等功能,助力企业实现数字化转型的目标。 一、…

使用 Docker 部署 的WAF: 雷池社区版

Web应用防火墙(WAF)是保护网站不受恶意攻击的关键组件。 使用 Docker 部署雷池社区版,可以大大简化安全管理工作。 一、WAF 雷池社区版简介 雷池社区版是一种流行的开源 Web 应用防火墙,它提供基本的安全保护,如防止…

ThreadLocalMap为什么用线性探测解决哈希冲突

前言 ThreadLocal 本身不存储值,访问的是当前线程 ThreadLocalMap 里存储的数据副本,实现了线程间的数据隔离。只有当前线程能访问,也就不存在并发访问时的安全问题了。 ThreadLocal 的核心是 ThreadLocalMap,它和 HashMap 不同的…

【数据结构与算法】quicksort快速排序算法大全:快速排序hoare法,快速排序挖坑法,快速排序前后指针法,快速排序优化,快速排序的非递归实现

一、快速排序算法 快速排序使用分治的思想来进行排序,其基本过程如下: 从待排序数组中选择一个元素作为枢轴(pivot)。将数组分割成两个子数组,使得左侧子数组的元素都小于等于枢轴,右侧子数组的元素都大于…

【C++初阶】第二站:类与对象(上) -- 上部分

前言: C学习的第二站:类和对象(上)文章的上半部分,知识点:面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装、类的作用域、类的实例化. 目录 面向过程和面向对象初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的…

【Docker】安装nacos以及实现负载均衡

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.nacos单个部署 1.镜像拉取 …

【Linux】Linux系统编程——pwd命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 pwd(Print Working Directory)命令用于显示用户当前工作目录的完整路径。这是一个常用的命令,帮助用户确定他们目前所在的目录位置。 2.命令格式 基本的 pwd 命令…

Excel表格的快速动态扩展与删除行

实例需求:工作表中的表格(ListObject)名称为Table1,表格列数不确定,需要实现如下功能: 当用户完成最后一行最后一列输入之后(如果该单元格为空,则视为输入未完成)&#…