哪些网站做视频能赚钱,百度热榜排行,婚庆公司网站搭建,seo简单速排名软件本文讲解 Python 爬虫实战案例#xff1a;抓取百度贴吧#xff08;https://tieba.baidu.com/#xff09;页面#xff0c;比如 Python爬虫吧、编程吧#xff0c;只抓取贴吧的前 5 个页面即可。今天一个毕业学生问到一个问题#xff1a;不清楚编写爬虫的步骤#xff0c;不…本文讲解 Python 爬虫实战案例抓取百度贴吧https://tieba.baidu.com/页面比如 Python爬虫吧、编程吧只抓取贴吧的前 5 个页面即可。今天一个毕业学生问到一个问题不清楚编写爬虫的步骤不知道如何下手故简单的给该学生简单总结了一下编写步骤有了编写步骤在以后编写爬虫按步骤来兴许会有事半功倍的效果本文我们将使用面向对象的编程方法来编写程序。注意本文只简单做步骤编写不做数据的分析。步骤如下
寻找URL变化规律
接下来寻找要爬取页面的 URL 规律搜索“Python爬虫”后此时贴吧第一页的的 url 如下所示https://tieba.baidu.com/f?ieutf-8kwpython爬虫frsearch点击第二页其 url 信息如下https://tieba.baidu.com/f?kwpython爬虫ieutf-8pn50点击第三页url 信息如下https://tieba.baidu.com/f?kwpython爬虫ieutf-8pn100重新点击第一页url 信息如下https://tieba.baidu.com/f?kwpython爬虫ieutf-8pn0如果还不确定您可以继续多浏览几页。最后您发现 url 具有两个查询参数分别是 kw 和 pn并且 pn 参数具有规律性如下所示
第n页pn(n-1)*50#参数params
pn(page-1)*50
params{kw:name,pn:str(pn)}url 地址可以简写为
https://tieba.baidu.com/f?kwpython爬虫pn450
编写爬虫程序
以面向对象方法编写爬虫程序时思路简单、逻辑清楚非常容易理解,我们可以按照以下步骤进行编写
1) 请求函数
请求函数最终的结果是返回一个 HTML 对象以方便后续的函数调用它。
2) 解析函数
解析函数用来解析 HTML 页面常用的解析模块有正则解析模块、bs4 解析模块。通过分析页面提取出所需的数据在后续内容会做详细介绍。
3) 保存数据函数
该函数负责将抓取下来的数据保至数据库中比如 MySQL、MongoDB 等或者将其保存为文件格式比如 csv、txt、excel 等。
4) 入口函数
入口函数充当整个爬虫程序的桥梁通过调用不同的功能函数实现数据的最终抓取。入口函数的主要任务是组织数据比如要搜索的贴吧名、编码 url 参数、拼接 url 地址、定义文件保存路径。
下面以类的形式编写爬虫程序并在类下编写不同的功能函数代码如下所示
from urllib import request
from urllib import parse
from fake_useragent import UserAgent
import time
import random# 定义爬虫类
class TiebaSpider(object):# 初始化url实例属性def __init__(self):self.url https://tieba.baidu.com/f?kw{}pn{}# 请求函数得到页面def get_html(self, url):# 使用第三方库设置UAheaders {User-Agent: UserAgent().firefox}# 重构请求对象req request.Request(urlurl, headersheaders)response request.urlopen(req)# 返回整个页面return response.read().decode(utf-8)# 解析函数此处代码暂时省略def parse_html(self, html):pass# 该函数负责将抓取下来的数据保至数据库中比如 MySQL、MongoDB 等或者将其保存为文件格式比如 csv、txt、excel 等def save_html(self, filename, html):with open(filename, w, encodingutf-8) as f:f.write(html)# 入口函数def run(self):kw input(请输入要爬取的关键字)parse_kw parse.quote(kw)begin int(input(请输入开始页))end int(input(请输终止始页))pn (begin - 1) * 50for i in range(begin, end 1):# 重构文件名称filename f{kw}_{i}.html# 拼接urlurl self.url.format(parse_kw, pn)# 调用保存方法self.save_html(filename, self.get_html(url))print(f第{i}页抓取成功)# 每爬取一个页面随机休眠2-3秒钟的时间time.sleep(random.randint(2, 3))#以脚本的形式启动爬虫
if __name__ __main__:start time.time()spider TiebaSpider()spider.run()stop time.time()print(爬取完成共耗%.2f时间 % (stop - start))
程序执行后爬取的文件将会保存至 Pycharm 当前工作目录输出结果
请输入要爬取的关键字python
请输入开始页1
请输终止始页5
第1页抓取成功
第2页抓取成功
第3页抓取成功
第4页抓取成功
第5页抓取成功
爬取完成共耗23.88时间爬虫程序结构总结
用面向对象的方法编写爬虫程序时逻辑结构较为固定总结如下
# 程序结构
class xxxSpider(object):def __init__(self):# 定义常用变量,比如url或计数变量等def get_html(self):# 获取响应内容函数,使用随机User-Agentdef parse_html(self):# 使用正则表达式来解析页面提取数据def write_html(self):# 将提取的数据按要求保存csv、MySQL数据库等def run(self):# 主函数用来控制整体逻辑if __name__ __main__:# 程序开始运行时间spider xxxSpider()spider.run()注意掌握以上编程逻辑有助于您后续的学习。