爬虫实战——百度贴吧
开始
首先使用chrome浏览器,进入百度贴吧
注意输入框中的url
分析
为了进行具体的url分析,我在搜索框中输入"Python",看一下url的变化
这时url变成了:
http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search&red_tag=b2531475437
通过分析,做一个测试, 删除url一些东西:
http://tieba.baidu.com/f?&kw=python
依旧可以得到正常的页面
下面进行翻页测试:
得到这样的一条url:
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
通过分析,再进行一次测试,删除url中的一些东西:
得到下面的url
http://tieba.baidu.com/f?kw=python&pn=50
依旧可以得到相应的页面,因此可以得出结论:
kw 和 pn 是这个页面中最重要的关键词,kw控制关键词(其实就是keyword的缩写), pn(其实就是page_number的缩写)控制翻页,每翻一页,pn增加50,也就是说一页有50条数据。
分析结束,开始代码
初始url先用这个,之后再慢慢修改: http://tieba.baidu.com/f?kw=python&pn=50
直接上代码,注意看代码中的注释
# 爬取百度贴吧 import requests class BdTieba(): def __init__(self, name, pn): # 保存贴吧名 self.name = name # 初始url self.base_url = "http://tieba.baidu.com/f?kw={}&pn=".format(name) # 构造请求头 self.headers = { "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" } # 2. 批量生成url # 使用列表推导式生成了url列表 self.url_list = [self.base_url + str(i*50) for i in range(pn)] # 打印测试 # print(self.url_list) # 3. 批量发送请求,封装发送请求 def get_data(self, url): response = requests.get(url, headers=self.headers) return response.content def save_data(self, data, index): filename = self.name + "_{}.html".format(index) with open(filename, "wb") as f: f.write(data) def run(self): # 1.请求初始url,测试使用 # response = requests.get(url=self.base_url, headers=self.headers) # 打印测试,测试成功返回结果 # print(response.text) # 2.批量生成url for url in self.url_list: data = self.get_data(url) # 3.批量发送请求 # 4.保存网页,为了保存的网页名字不重复,且有顺序,这里使用index进行区分 # 获取当前url的index index = self.url_list.index(url) # 保存 self.save_data(data, index) if __name__ == '__main__': bdspider = BdTieba("python", 10) bdspider.run()
这里我只通过批量生成url,并批量获取url响应,并保存了url响应数据,这里测试了10页数据,如果想要爬取每个url中的数据,还需要进行页面分析和提取,这里就需要使用xpath,作为新手入门的一个教程,后续我会拿这个项目继续改进,增加xpath解析,爬取每页的文字信息,这里就先到这了。
后面我会写一篇关于xpath的简单快速上手文章,然后再对这个实战进行下一步的更新
over~
peace~
个人博客: www.limiao.tech
微信公众号:TechBoard

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java静态方法和实例方法 java中的数组作为形参传入
Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭退出时,该实例会消失。如果一个机器上运行着三个Java程序,即有三个Java虚拟机实例Java虚拟机会调用某个初始类的main()方法运行一个Java程序,此方法将会作为程序的初始线程启动,任何线程都是由主线程启动的。 守护线程和非守护线程 Java虚拟机有两种线程,守护线程和非守护线程。例如垃圾收集任务的线程,属于守护线程。 Java可以将创建的任何线程定义为守护线程 main为非守护线程,当虚拟机中的所有非守护线程终止的时候,虚拟机实例将会自动退出。 类加载器 用于加载class文件中的类 运行数据区 分为本地方法区,堆,栈,寄存器,本地方法栈 方法区 被称为静态区,和堆一样,会被所有线程共享。方法区会包含静态的class和static变量 在java虚拟机启动的时候会被装载 堆 储存对象,即new出的实例,会在堆中储存。会被所有线程共享,不存放基本类型和对象引用。 对象中会有一个指向方法区的指针,用来把堆中new出的对象和方法区的类和静态变量连接起...
- 下一篇
如何创建.gitignore文件
为什么要创建.gitignore文件? 因为.gitignore可以排除提交时携带的不必要文件,比如Java中的.class文件。同时还可以排除其他不想提交或者提交没这个必要的文件等等。 创建步骤如下: 1.打开git bash 2.进入对应的目录,确保与.git在同一目录下 3.执行 touch .gitignore 4.编辑.gitignore文件 将提交需要排除的文件夹放入.gitignore文件中
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题