当前位置: 首页 > news >正文

爬虫简单实操2——以贴吧为例练习

需求是将贴吧的【某个吧】里面【n页】的网页代码爬取下来,保存至本地

首先我们要思考这个贴吧爬虫的框架,要有方法可以构造url列表(就可以一次获取多个url),能请求获取相应,能把html保存到本地。

import requestsclass TiebaSpider(object): # 初始化核心组件def __init__(self):  ....要有url要有headersdef 构造url列表(self):  passdef 获取响应(self):  passdef 保存(self):  passdef run(self):     '''主要业务逻辑'''#url列表#发送请求获取响应#保存if __name__ == '__main__':  TiebaSpider=TiebaSpider()TiebaSpider.run()

一、初始化核心组件
找到贴吧某个吧【lol吧】的url: https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=450
pn是确定页面的参数,450/50=9,0是第1页,9是第10页

self.start_url = 'https://tieba.baidu.com/f?kw='+tieba_name+'&ie=utf-8&pn={}'
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

二、构造url列表
需要构建一个空列表,

format() 的基本功能作用:将变量值填充到字符串的 {} 占位符中。
def get_url_list(self):# 构造URL列表url_list = []for i in range(10): #循环10次,也就是10页url_list.append(self.start_url.format(i*50))                                                        # print(url_list)  #检测url写对没return url_list  #然后返回url_list

不想写了,明天再继续

n、整体代码

import requestsclass TiebaSpider(object): #集成object 面向对象def __init__(self,tieba_name):  #init# 初始化核心组件  #https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=450   pn是页面,一页50条self.tieba_name = tieba_name  #这样才可以在别的方法里使用到传过来的tieba_name,以 self.tieba_name 变量来使用self.start_url = 'https://tieba.baidu.com/f?kw='+tieba_name+'&ie=utf-8&pn={}'self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}def get_url_list(self):# 构造URL列表'''url_list = []for i in range(10): #10次10页url_list.append(self.start_url.format(i*50))                                                               # print(url_list) #检测url写对没return url_list  #然后返回url_list'''# 列表推导式(List Comprehension)是 Python 中一种简洁高效的构建列表的方式,可以替代显式的 for 循环和 append 操作。想要看结果也可以把推导式保存至变量,然后print出来return [self.start_url.format(i*50) for i in range(10)]def parse_url(self,url):print(url)# 发送请求,得到响应response = requests.get(url,headers=self.headers)response.encoding = 'utf-8'return response.text  #返回的值是网页代码def save_html(self,html,page_num):# 保存 tieba_name-第i页.html# print(page_num)with open(self.tieba_name+'-第'+str(page_num)+'页.html','w',encoding='utf-8') as f:f.write(html)def run(self):     #run方法'''主要业务逻辑'''#构造URL列表url_list = self.get_url_list() #调用所以这个列表会保存到url_list里面#遍历 发送请求获取响应for url in url_list:  #循环列表里元素个数的次数,然后每次把列表里面的元素按顺序赋值给urlhtml = self.parse_url(url) #调用此方法传参url,所以方法里面要接受url,参数要加上url# print(html)page_num = url_list.index(url) + 1  #index()前面的对象要是列表,url只是列表里面的一个元素,是一个str类型#保存self.save_html(html,page_num) #调用此方法传参html,所以方法里面要接受html,参数要加上html。然后把page_num传给save_html()方法# exit()  #循环第一次就退出if __name__ == '__main__':  #mainTiebaSpider = TiebaSpider('lol')  #实例化这个类  lol贴吧名TiebaSpider.run()

相关文章:

  • 做油和米的网站班级优化大师官方网站
  • 网站建网站建设企业电话seo代码优化包括哪些
  • 外贸网站设计设计注意事项百度手机导航官方新版
  • 网站建设及相关流程图佛山做网站建设
  • 兼职网站做任务什么是互联网销售
  • 厦门建网站哪家好苏州seo关键词优化排名
  • 阅读服务使用示例(HarmonyOS Reader Kit)
  • Spring 框架
  • 人大金仓Kingbase数据库KSQL 常用命令指南
  • Vue-15-前端框架Vue之应用基础编程式路由导航
  • Node.js特训专栏-实战进阶:9.MySQL连接池配置与优化
  • leetcode 65
  • A模块 系统与网络安全 第三门课 网络通信原理
  • react - ReactRouter—— 路由传参
  • MP1652GTF-Z:MPS高效3A降压转换器 工业5G通信专用
  • React HOC(高阶组件-补充篇)
  • ubuntu安装docker遇到权限问题
  • kubernetes》》k8s》》滚动发布 、金丝雀发布 、
  • Vue-14-前端框架Vue之应用基础嵌套路由和路由传参
  • 闲庭信步使用SV搭建图像测试平台:第十三课——谈谈SV的数据类型
  • 在一个成熟产品中,如何设计数据库架构以应对客户字段多样化,确保系统的可维护性、可扩展性和高性能。
  • androidx中<layout>根布局的意义及用法
  • 从UI设计到数字孪生:构建智慧城市的数据可视化体系
  • 百度中年危机:一场艰难的突围战
  • 解决uniapp vue3版本封装组件后:deep()样式穿透不生效的问题
  • ISP Pipeline(6): Color Filter Array Interpolation 色彩滤波阵列