我的第一只Python爬虫:从Requests库到爬取整站新书

大家好,今天我想和大家聊聊一个既有趣又实用的编程技能------Python网络爬虫。无论你是想做数据分析、竞品调研,还是只是单纯好奇如何从网上获取信息,这篇文章都能给你一个清晰的起点。

🤔 为什么要学网络爬虫?

在这个信息爆炸的时代,网络上的数据量呈指数级增长。无论是做数据分析、竞品调研,还是学术研究,我们都需要从海量信息中提取有价值的数据。

• 数据分析的基础:爬虫可以帮我们获取原始数据,为后续的清洗、分析和可视化打下基础

• 自动化的利器:代替人工完成重复的信息收集工作,大大提高效率

• 编程能力的试炼场:涉及HTTP协议、HTML解析、数据存储等多个知识点,能全面提升你的编程水平

📜 爬虫的"交通规则":Robots协议

在结束今天的分享前,我想再次强调遵守robots.txt的重要性。这不仅是技术问题,更是伦理问题。

• 查看目标网站的Robots协议:访问https://www.example.com/robots.txt

• 尊重网站的爬取规则:避免访问被禁止的路径

• 控制爬取频率:给服务器留有余地

🚀 Requests库:爬虫的"瑞士军刀"

作为Python爬虫的基石,requests库的强大远超你的想象。它不仅能发送简单的GET请求,还能处理各种复杂场景。

  1. requests库的安装

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

  1. GET请求的高级玩法

除了基础的URL访问,GET请求还可以通过params参数传递查询条件:

python 复制代码
import requests
r = requests.get("https://www.ryjiaoyu.com")
print(r.text)


这种方式让我们能灵活地构造搜索请求,模拟用户在网站上的搜索行为。

• get()搜索信息

python 复制代码
import requests
r = requests.get('https://www.ryjiaoyu.com//search?keyword=python')
print(r.text)

• get()添加信息

python 复制代码
import requests
info = {'keyword':'excel'}
r = requests.get('https://www.bilibili.com/sarch',params = info)
print(r.url)
print(r.text)
  1. 返回Response对象

• Response 的属性

Response包含的属性有status_code、headers、url、encoding、cookies等。

status.code(状态码):当获取一个HTML网页时,网页所在的服务器会返回一个状态码,表明本次获取网页的状态。

python 复制代码
import requests
r = requests.get("https://www.baidu.com")
print(r.status_code)
print(r.headers)
print(r.url)
print(r.encoding)
print(r.cookies)
if r.status_code==200:
    print(r.text)
else:
    print('本次访问失败')

• 设置编码

python 复制代码
import requests
url = "https://www.baidu.com/"
head = {"Uesr-Agent":"Mozilla/5.0(Windows NT 10.0; Win4; x64) ADpLeeBkit/537.36 (KHTML, Like Geck0) Chrome/142. 0.0.0 Safari/537.36 E/142.0.0.0"}
r = requests.get(url,headers=head)
r.encoding = r.apparent_encoding
print(r.text)

• 返回网页内容

esponse对象中返回网页内容有两种方法,分别是text()方法和content()方法,其中text()方法在前面的内容中有介绍,它是以字符串的形式返回网页内容。而content()方法是以二进制的形式返回网页内容,常用于直接保存网页中的媒体文件。

python 复制代码
import requests
r = requests.get('https://cdn.ptpress.cn/uploadimg/Material/978-7-115-68312-0/72jpg/68312_s300.jpg')
f2= open('b.jpg','wb')#w表示创建写模式,b表示二进制模型
f2.write(r.content)
f2.close()
f1 = open('a.txt','w',encoding='utf-8')
f1.write('人工智能')
f1.close
  1. 小项目案例:实现处理获取的网页信息

使用get()函数获取HTML网页源代码的目的在于让获取的信息为用户所用。例如获取某购物网站新上架的商品信息,由于该网站每天都可能会上架新商品,因此工作人员每天都需要进入网站观察并统计新商品信息。这些工作完全可以使用代码来完成,即通过requests库爬取网站信息,并自动识别网页中的所有新商品信息,从而实现自动化处理信息。

python 复制代码
import requests
import re
r = requests.get('https://www.ryjiaoyu.com/tag/details/7')
print(r.text)
result = re.findall(r'title="(.+)">(.+)</a></h4>',r.text)
for i in range(len(result)):
    print('第',i+1,'本书:',result[i][1])

⚠️ 爬虫的伦理与法律

最后,我想强调一下爬虫的伦理和法律问题:

  1. 遵守Robots协议:这是最基本的礼貌

  2. 控制爬取频率:不要给目标网站带来过大压力

  3. 尊重版权:不要爬取和传播受版权保护的内容

  4. 注意数据隐私:避免爬取个人敏感信息

记住,技术本身是中立的,关键在于我们如何使用它。一个负责任的爬虫开发者,应该始终保持敬畏之心。

相关推荐
2301_790300963 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
Data_Journal3 小时前
Scrapy vs. Crawlee —— 哪个更好?!
运维·人工智能·爬虫·媒体·社媒营销
3 小时前
java关于内部类
java·开发语言
好好沉淀3 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
lsx2024063 小时前
FastAPI 交互式 API 文档
开发语言
VCR__3 小时前
python第三次作业
开发语言·python
韩立学长3 小时前
【开题答辩实录分享】以《助农信息发布系统设计与实现》为例进行选题答辩实录分享
python·web
码农水水3 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
wkd_0073 小时前
【Qt | QTableWidget】QTableWidget 类的详细解析与代码实践
开发语言·qt·qtablewidget·qt5.12.12·qt表格
东东5163 小时前
高校智能排课系统 (ssm+vue)
java·开发语言