Python爬虫实战:爬取百度热搜榜的技术分析与实现
一、项目概述
本文将介绍一个Python的爬虫程序,用于抓取百度实时热搜榜数据并保存到本地文件。这个爬虫适合初学者学习基本的网页抓取技术,涵盖了数据请求、数据解析、数据储存和基本的反反爬策略。btw这是我在以前高一闲暇时候写的一个爬虫脚本哦
二、技术要点解析
1. 咱们先来介绍一下核心组件,有三个。其中requests库是python爬虫的核心;lxml库的xpath则是用来解析提取requests请求回来的web前端源码。
- requests库:用于发送HTTP请求获取网页内容
- lxml库:用于解析HTML文档和提取数据
- os和time库:用于文件操作和时间处理
2. 关键实现细节
(1)数据请求
resp = requests.get(url=url,headers=Spider.Headers)
个人认为,这是整个python爬虫的核心。
基本的反反爬策略:请求头设置
Headers = {
'Referer': 'https://top.baidu.com/board?tab=realtime',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0... Firefox/91.0',
}
咱在请求时设置合理的请求头可以降低被反爬的风险。我们一般可以在浏览器点击键盘f12打开开发者模式来查看User-Agent和Referer。
(2) 数据提取
html = etree.HTML(resp.text)
title = html.xpath("//div[@class='c-single-text-ellipsis']/text()")
使用XPath定位热搜标题元素。
(3) 数据存储
if not os.path.exists(DirName):
os.mkdir(DirName)
with open(Path, 'a') as f:
f.write(time.ctime()+"\n")
for i,j in enumerate(li,start=1):
with open(Path,'a') as f:
f.write(str(i)+"、 "+j+"\n")
return True
采用追加模式写入文件,每条热搜按序号排列保存。
这里采用的是写入txt文件的方式,其他的储存方式还有json文件、csv文件和写入数据库。
这里用了enumerate函数,有想学习的小伙伴可以在站内搜索哦 很ez的!
三、完整代码
下面放一下源码。
import requests
import time
import os
from lxml import etree
class Spider:
Headers = {
'Referer': 'https://top.baidu.com/board?tab=realtime',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0',
}
@staticmethod
def getData(url: str)->list[str]:
resp = requests.get(url=url,headers=Spider.Headers)
html = etree.HTML(resp.text)
title = html.xpath("//div[@class='c-single-text-ellipsis']/text()")
return title
@staticmethod
def saveFile(li:list[str])->bool:
DirName = "百度热搜榜爬虫"
FileName = "百度热搜榜爬虫%s.txt"%time.strftime("%Y_%m_%d_%H_%M_%S")
Path = DirName + '/' + FileName
if not os.path.exists(DirName):
os.mkdir(DirName)
with open(Path, 'a') as f:
f.write(time.ctime()+"\n")
for i,j in enumerate(li,start=1):
with open(Path,'a') as f:
f.write(str(i)+"、 "+j+"\n")
return True
def main()->int:
url = "https://top.baidu.com/board?tab=realtime"
if Spider.saveFile(li=Spider.getData(url=url))==True:
print("爬取成功...")
return 0
if __name__ == '__main__':
main()
四、总结
这个爬虫虽然简单,但包含了爬虫的基本要素:请求数据、解析数据和存储数据,涵盖了爬虫的基本要素。通过学习这个案例,可以掌握:
1. 使用requests获取网页内容
2. 使用lxml和XPath解析HTML
3. 基本的文件操作
4. Python面向对象的编程方式
对于想学习爬虫的初学者来说,这是一个很好的入门项目。后续可以在此基础上增加更多的功能,如定时爬取、数据可视化等。
(纯原创技术分享,请勿用于非法用途!!!)
766

被折叠的 条评论
为什么被折叠?



