这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图
首先我们使用 Chrome 浏览器打开 百度贴吧,在输入栏中输入关键字进行搜索,这里示例为 “计算机吧”
接下来我们开始分析网站的 URL 规律,以便于通过构造 URL 获取网站中所有网页的内容
第一页:http://tieba.baidu.com/f?kw=%E8%AE%A1%E7%AE%97%E6%9C%BA&ie=utf-8&pn=0 第二页:http://tieba.baidu.com/f?kw=%E8%AE%A1%E7%AE%97%E6%9C%BA&ie=utf-8&pn=50 第三页:http://tieba.baidu.com/f?kw=%E8%AE%A1%E7%AE%97%E6%9C%BA&ie=utf-8&pn=100 …
通过观察不难发现,它的 URL 十分有规律,主要的请求参数分析如下:
kw
:搜索的关键字,使用 URL 编码,可以通过urllib.parse.quote()
方法实现ie
:字符编码的格式,其值为 utf-8pn
:当前页面的页码,并且以 50 为步幅增长
所以完整的 URL 可以泛化如下:http://tieba.baidu.com/f?kw={keyword}&ie=utf-8&pn={page}
核心代码如下:
import urllib.request
import urllib.parse
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
# 获取网页源代码
def get_page(url):
# 构造请求头部
headers = {
'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 构造请求对象
req = urllib.request.Request(url=url,headers=headers)
# 发送请求,得到响应
response = urllib.request.urlopen(req)
# 获得网页源代码
html = response.read().decode('utf-8')
# 返回网页源代码
return html
(3)分析内容规律
接下来我们直接使用快捷键 Ctrl+U
打开网页的源代码,认真分析每一页中我们需要抓取的数据
容易发现每一个帖子的内容都被包含在一个
- 标签中,我们可以使用正则表达式进行匹配,具体包括:
-
-
主题名称:
r'href="/p/\d+" title="(.+?)"'
-
主题作者:
r'title="主题作者: (.+?)"'
-
链接地址:
r'href="/p/(\d+)"'
-
回复数:
r'title="回复">(\d+)(.+?)(\d+)',html) # 创建时间 ctimes = re.findall(r'title="创建时间">(.+?)(\d+)',html) ctimes = re.findall(r'title="创建时间">(.+?)
关注打赏
-
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?