python爬虫01

前言 

之前的学习不是很努力就间断更新了,现在所有的内容是在具有python基础和web基础上继续更新的。接下来是爬虫和Flask框架共同更新,一起加油吧。

接v:13053025350(毕设,小程序)

看不懂python基础的可以阅读博主前几篇python学习的前三章

看不懂web的可以阅读博主的第1-3篇博客(html,css,js)

养成习惯,先赞后看,重新来过一遍。

爬虫的定义

爬虫(Crawler),也称为网络爬虫或网络蜘蛛,是一种自动化程序,用于在互联网上收集、分析和存储信息。它通过模拟人类用户的行为,自动访问网页、提取数据并进行处理,以获取所需的信息。爬虫主要用于搜索引擎的索引、数据挖掘、网站监测、信息抓取等领域。


简单说:

  1. 定义访问的链接网站
  2. 对该请求进行伪装,通过机器模拟人的行为去发送请求
  3. 得到响应结果之后,对数据进行处理
  4. 对数据进行分析或者其他用途 

注意:违法的咱不能爬,灰产的业务不能接,这个适合做副业,自己甄别吧!

第一个爬虫

from urllib.request import urlopen# 设置要请求的 URL
# 此处要注意的是http而不是https
baseUrl = 'http://www.baidu.com/'try:# 发起请求并获取响应response = urlopen(baseUrl)# 读取响应内容readContent = response.read()# 解码为字符串decode_Content = readContent.decode('utf-8')# 将内容保存为 HTML 文件with open('01_baidu.html', 'w', encoding='utf-8') as file:file.write(decode_Content)print("网页内容已成功保存为 baidu.html")except Exception as e:print(f"发生错误: {e}")

代码解释 

这段代码是使用Python的urllib库来访问百度网站并将网页内容保存为一个HTML文件。

1、首先,我们导入了urllib库中的urlopen函数来发起一个HTTP请求

2、将百度网址作为请求的目标URL。注意,在此例中,我们使用http而不是https作为URL的协议

3、尝试发起请求并获取响应。如果请求成功,我们将会得到一个response对象,其中包含了从百度网站返回的数据。

4、通过调用response对象的read()方法读取响应内容,该方法返回一个字节字符串。

5、调用decode()方法将字节字符串解码为UTF-8格式的字符串。

6、将解码后的内容保存为一个HTML文件。使用open()函数打开文件并使用'w'模式(写入模式)。我们指定编码为UTF-8,并将解码后的内容写入文件中。

 

如果这个过程中发生了任何错误,我们将会捕获异常并打印错误消息。否则,我们将输出提示信息,表示网页内容已成功保存为'01_baidu.html'文件。

  headers定制

这个就是伪装自己的发送的请求,这个比较简单,前期通过简单的方式去伪装一下自己。

主要是通过Request库,可以将请求头和url进行组合,封装成一个新的请求

动态设置随机浏览器内核也是很棒的,使用random中的choice的随机数字

from urllib.request import urlopen
from urllib.request import Request
from random import choice# 基本请求的地址 , 定制请求对象就可以访问百度的连接地址 https
baseUrl = "https://movie.douban.com/top250"# 动态设置随机的浏览器
user_agents=['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36','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'
]# headers定制
headers = {"User-Agent": choice(user_agents)
}# 请求连接封装
req = Request(baseUrl, headers=headers)# 发送请求
response = urlopen(req)# 读取内容
res_read = response.read()# 编码格式
res_decode = res_read.decode('utf-8')# 保存请求的页面
with open('02_baidu.html','w',encoding='utf-8') as file:file.write(res_decode)
print('02_网页下载成功')

上面都是有注释的,每一行是干啥的,感兴趣的小伙伴,可以直接复制,点击运行试试看吧!

get请求和post请求携带参数的方式

get请求

from random import choice
from urllib.request import urlopen, Request
from urllib.parse import quote
from urllib.parse import urlencode# 中文参数转码第一种方式 使用parse中的quote方法  quote('张三')
# 中文参数转码第二种方式 使用parse中的urlencode方法  urlencode({"w":'张三'})search = {'q':'合肥电影',"w":'你好'
}
# print(urlencode(search))# url= 'https://cn.bing.com/search?q={}'.format(quote(search))
url= 'https://cn.bing.com/search?{}'.format(urlencode(search))
print(url)
# 动态设置随机的浏览器
user_agents=['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36','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'
]# headers定制
headers = {"User-Agent": choice(user_agents)
}
request = Request(url,headers=headers)
content = urlopen(request)
content_read = content.read()
content_decode = content_read.decode('utf-8')
print(content_decode)

post请求

from urllib.request import urlopen, Request
from urllib.parse import urlencodeurl= 'http://www.sxt.cn/index/login/login.html'
data ={"user":'17703181473',"password":"123456"
}f_data = urlencode(data)# headers定制
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
}
# 如果post请求出现这个报错
# TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
# 需要使用encode()   request = Request(url,headers=headers,data=f_data.encode())request = Request(url,headers=headers,data=f_data.encode())
content = urlopen(request)
content_read = content.read()
content_decode = content_read.decode('utf-8')
print(content_decode)

注意

如果出现:

TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
需要使用encode()   request = Request(url,headers=headers,data=f_data.encode())

百度贴吧实战

需求:将百度贴吧的某个词条下面的所有评论和页面保存成html,保存在本地的当前目录中(数据清洗和数据提取,在后期慢慢来)

代码如下:

from urllib.request import Request
from urllib.request import urlopen
from urllib.parse import quote# 获取到传过来的地址,进行请求定制封装
def get_html(url):headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (HTML, like Gecko) ''Chrome/131.0.0.0 Safari/537.36',}# 封装请求req = Request(url, headers=headers)# 发起请求得到响应response = urlopen(req)# 将得到的返回值-html返回出去return response.read().decode()# 保存页面
def save_html(html, filename):# 将得到的页面进行保存在本地with open(filename, 'w', encoding='utf-8') as file:file.write(html)# 入口参数文件
def main():content = input("请输入搜索词条:")num = int(input('请输入获取的页数:'))# 循环操作for i in range(num):# 地址封装url = "https://tieba.baidu.com/f?ie=utf-8&kw=" + quote(content) + "&fr=search&pn={}".format(i * 50)# 调用get_html函数,得到return 的返回值html_request = get_html(url)# 拼接返回的名称filename = '第' + str(i + 1) + "页.html"# 调用保存的html的页面save_html(html_request, filename)# 启动文件
if __name__ == '__main__':main()

核心步骤:

  1. 爬取地址的选择
  2. 请求头的定制
  3. 拼接参数,发送请求得到响应
  4. 存储文件到本地

豆瓣top250实战

from urllib.request import Request
from urllib.request import urlopen
from time import sleepheaders = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (HTML, like Gecko) ''Chrome/131.0.0.0 Safari/537.36',
}url="https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=60000&limit=20"
# url="https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=60&limit=20"i = 0
base_url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={}&limit=20"
while True:req = Request(base_url.format(i*20),headers=headers)req_read = urlopen(req)req_decode =req_read.read()content =req_decode.decode('utf-8')print(content)if(content == "[]"):breakelse:i+=1sleep(3)

注意:

里面有一个sleep(3),是让该程序3秒后在执行,减少对爬取网站的访问频次(小技巧)

while True死循环,直到content == “[ ]”,结束循环。

结语

更新速度可能没有那么快,因为还要一遍学习flask,一遍工作,一遍学习爬虫。

如果您看到这,点个赞吧~~~~~~~

开源项目

koa_system: 🔥🔥🔥Koa2 + React商城项目前端-React + Antd前端-Vue2 + Element-plus后端-Koa2 + Sequelizeicon-default.png?t=O83Ahttps://gitee.com/ah-ah-bao/koa_system

Vue2Admin和Vue3Admin版本的后台还没有对接口,但是整体的框架已经启动;

uniClient和vue的一样都没有进行开发,但是整体框架已经启动;

目前正在开发ReactAdmin的版本:React + typescript + Antd;

后台使用的是:Koa + Mysql + Sequelize;

值得注意的是,该项目只需要本地安装mysql ,但是不需要导入sql文件,运行modal即可。

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

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

相关文章

使用CIFS挂载nas到centos

要将 NFS 挂载改为 CIFS 挂载方式,你需要确保以下条件满足: NAS 支持 SMB/CIFS 协议: 大多数 NAS 设备同时支持 NFS 和 SMB/CIFS 协议。在 NAS 配置中,确保 CIFS 服务已启用,并且你有访问共享路径的用户名和密码。 安…

开发基础(3):开发应用沉浸式效果 组件安全区方案

什么是沉浸式效果 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条,其中状态栏和导航条,通常在沉浸式布局下称为避让区;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感…

第四篇:k8s 理解Service工作原理

什么是service? Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。 简单来说K8s提供了service对象来访问pod。我们在《k8s网络模型与集群通信》中也说过k8s集群中的每一个Pod(最小调度单位)都有自己的IP地址,都…

Spring Boot 3.4.0 发布:功能概览与示例

Spring Boot 3.4.0 带来了许多增强功能,使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述,以及一些帮助您快速入门的代码示例。 1. 应用程序版本管理 Spring Boot 引入了 spring.application.version 属性,方便开发者设置和访…

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 (一)密码修改 用户可以在“安全->密码安全管理->数据…

基于DFA算法实现敏感词过滤

1、什么是DFA? DFA(Deterministic Finite Automaton),即确定有穷自动机。其特征为:有一个有限状 态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是 初态&#…

隐私安全大考,Facebook 如何应对?

随着数字时代的到来和全球互联网用户的快速增长,隐私安全问题已上升为网络世界的重要议题。社交媒体巨头Facebook因其庞大的用户群体和大量的数据处理活动,成为隐私问题的聚焦点。面对隐私安全的大考,Facebook采取了一系列策略来应对这些挑战…

基于深度学习的甲状腺结节影像自动化诊断系统(PyQt5界面+数据集+训练代码)

随着医学影像技术的发展,计算机辅助诊断在甲状腺结节的早期筛查中发挥着重要作用。甲状腺结节的良恶性鉴别对临床治疗具有重要意义,但传统的诊断方法依赖于医生的经验和影像学特征,存在一定的主观性和局限性。为了解决这一问题,本…

更换 Git 项目的远程仓库地址(五种方法)

更换 Git 项目的远程仓库地址有几种不同的方法,下面是详细的步骤和一些额外的方法来完成这个任务。 方法1:使用 git remote set-url 这是最直接的方法。假设你想要更改名为 origin 的远程仓库地址到新的 URL。 查看当前的远程仓库配置: git…

秒懂:使用js验证hash, content hash , chunk hash的区别

一、使用js验证hash, content hash , chunk hash的区别 1、计算一般的 Hash(以简单字符串为例) 使用crypto-js库来进行哈希计算,需提前引入npm install crypto-js库。 crypto-js: 是一个JavaScript加密算法库,用于实…

深入浅出:PHP中的字符串处理函数全解析

文章目录 引言理解字符串创建字符串使用单引号使用双引号 访问和修改字符串访问字符修改字符 字符串连接 常用字符串处理函数获取字符串长度查找子字符串查找首次出现的位置查找最后一次出现的位置 替换子字符串简单替换多次替换 分割字符串按分隔符分割 合并字符串转换大小写全…

Telnet不安全?如何配置使用更安全的STelnet远程登录华为AR1000V路由器?

在上一篇文章中,我们介绍了如何配置一台全新的AR1000V,来实现通过Telnet远程登录设备(如何配置使用Telnet远程登录华为AR1000V路由器?)。其实,在之前的文章中,我们已经介绍过Telnet是一种不安全…

kafka 和 rocketmq 的区别

Kafka 和 RocketMQ 是两种高性能的分布式消息队列系统,广泛用于实时数据处理、事件流处理和分布式系统的解耦。以下是两者的主要区别: 起源和生态 Kafka 起源于 LinkedIn,后贡献给 Apache 社区。拥有强大的开源生态和广泛的社区支持。广泛应…

CV(2)-插值和卷积

前言 仅记录学习过程,有问题欢迎讨论 看看年前可以学到哪。 频率: 灰度值变化程度的指标,是灰度再平面上的梯度幅值: 幅值: 是在一个周期内,交流电瞬时出现的最大绝对值,也是一个正弦波,波…

python数据分析之爬虫基础:解析

目录 1、xpath 1.1、xpath的安装以及lxml的安装 1.2、xpath的基本使用 1.3、xpath基本语法 2、JsonPath 2.1、jsonpath的安装 2.2、jsonpath的使用 2.3、jsonpath的基础语法 3、BeautifulSoup 3.1、bs4安装及创建 3.2、beautifulsoup的使用 3.3、beautifulsoup基本语…

QNX的系统资源访问机制

资料参考: QNX官网文档 在QNX中,一些系统的资源默认是无法访问的,或者可访问的范围过大,导致产生不可控的危险,此时便需要对系统资源进行访问限制 接口如下 #include <sys/rsrcdbmgr.h> #include <sys/rsrcdbmsg.h>int rsrcdbmgr_create(

1000 道最新高频 Java 面试题

金九银十已过&#xff0c;之前面试的也差不多了&#xff0c;小编在这里给大家整理了一套阿里面试官最喜欢问的问题或者出场率较高的面试题&#xff0c;助校招或者社招路上的你一臂之力&#xff01; 首先我们需要明白一个事实&#xff0c;招聘的一个很关键的因素是在给自己找未…

记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。

环境如下&#xff1a; vite:5.4.10 tailwindcss: 4.0.0-beta.4 tailwindcss/vite: 4.0.0-beta.4 4.0默认的样式优先级比较低 如果使用了一些reset的css文件 那么很多样式会失效 例如&#xff1a;reset.css中 html, body, ul, li, h1, h2, h3, h4, h5, h6, dl, dt, dd, ol, i…

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器&#xff08;EC2&#xff09;&#xff0c;用于学习&#xff0c;遇到一个问题就是默认是用ec2-user用户登录&#xff0c;也需要密钥对。 既然是学习用的服务器&#xff0c;还是想直接用root登录&#xff0c;下面开始修改&#xff1a; 操作系统是&#xff1…

《向量数据库指南》——OPPO分布式向量检索的实战与突破

OPPO对向量检索的探索:从单机到分布式的华丽转身 在当今这个数据爆炸的时代,如何高效地存储、检索和分析数据,成为了企业面临的一大挑战。特别是在人工智能领域,向量数据的处理更是占据了举足轻重的地位。OPPO,作为全球知名的智能手机制造商,自然也不会放过这个技术风口…