文档章节

爬虫:利用python完成百度贴吧数据采集 - 知乎

o
 osc_lei22161
发布于 07/01 15:11
字数 879
阅读 58
收藏 0

精选30+云产品,助力企业轻松上云!>>>

前言:本文主要是分享下利用python爬取百度指定贴吧的全部帖子以及帖子回复内容,主要是利用python的request库获取网页信息,通过正则等方式解析我们需要的数据并存储到数据库中,并且后续可以用于情感分析、热词分析等分析,这些分析操作可以看我的另一篇文章。

https://www.bizhibihui.com/blog/article/38

下面我们开始正式介绍如何从零开始完成百度贴吧的数据采集代码

首先,我们还是一如既往的打开我们要爬取的目标网站进行分析,如下图所示



我们还是从上到下,挨个寻找返回具体信息的接口请求,我们可以很容易就发现第一个请求里就返回了数据



但是我们会发现这个数据和我们常见的网页数据不一样,我们可以用request来论证这个观点

response = requests.get(url,headers=self.headers)
        try:
            response_txt = str(response.content,'utf-8')
        except Exception as e:
            response_txt = str(response.content,'gbk')

我们会发现无法直接通过xpath解析我们拿到的数据,原因其实很简单,就是这些网页数据是百度通过特殊的js动态渲染的,但是我们在第一个请求里其实就可以拿到我们想要的数据,只不过,我们需要多费点劲,我们现在就来研究下这个接口里返回的数据,如下图所示



可以发现,我们所有的数据的html都是被<!-- -->符号给包裹起来了,这对于html文件来说就是注释的意思,所以直接解析这些数据,肯定是无法获取的,既然我们无法解析,那就该想想其他的办法,既然我们发现了我们的数据都是存在于<!-- -->符号,那我们可以考虑把这个数据当成整个的字符串,然后用正则表达式获取这部分内容不就成了么,说干就干,代码如下:

bs64_str = re.findall('<code class="pagelet_html" id="pagelet_html_frs-list/pagelet/thread_list" style="display:none;">[.\n\S\s]*?</code>', response_txt)
        
        bs64_str = ''.join(bs64_str).replace('<code class="pagelet_html" id="pagelet_html_frs-list/pagelet/thread_list" style="display:none;"><!--','')
        bs64_str = bs64_str.replace('--></code>','')

解析的结果你们就自行实验去把,按照这种正则表达式我们就可以拿到我们想要的数据,拿到了数据,我们就可以利用xpath解析数据,代码如下

html = etree.HTML(bs64_str)
        # print(thread_list)
        # 标题列表
        title_list = html.xpath('//div[@class="threadlist_title pull_left j_th_tit "]/a[1]/@title')
        # print(title_list)
        # 链接列表
        link_list = html.xpath('//div[@class="threadlist_title pull_left j_th_tit "]/a[1]/@href')
        # 发帖人
        creator_list = html.xpath('//div[@class="threadlist_author pull_right"]/span[@class="tb_icon_author "]/@title')
        # 发帖时间
        create_time_list = html.xpath('//div[@class="threadlist_author pull_right"]/span[@class="pull-right is_show_create_time"]/text()')
        creator_list = creator_list[1:]
        create_time_list = create_time_list[1:]
        print(create_time_list)
        print(create_time_list[1])
        for i in range(len(title_list)):
            item = dict()
            item['create_time'] = create_time_list[i]
            if(item['create_time'] == '广告'):
                continue
            item['create_time'] = self.get_time_convert(item['create_time'])
            print(item['create_time'])
            item['title'] = self.filter_emoji(title_list[i])
            item['link'] = 'https://tieba.baidu.com'+link_list[i]
            item['creator'] = self.filter_emoji(creator_list[i]).replace('主题作者: ','')
            item['content'] = self.filter_emoji(item['title'])
            print(item['creator'])
            # 保存帖子数据
            result = self.database.query_tieba(item['link'])
            if(not result):
                self.database.save_tieba(item)
            self.spider_tieba_detail(item['link'])

进行到这一步,我们的爬虫代码基本就成了,这只是简单的实现,我们可以看下爬到的数据,如下图所示



完整代码的话去我开源的爬虫项目里看看,有任何疑问,也欢迎各位留言或者咨询

https://gitee.com/chengrongkai/OpenSpiders

本文首发于https://www.bizhibihui.com/blog/article/43

o
粉丝 0
博文 56
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
爬虫:利用python完成百度贴吧数据采集 - 知乎

前言:本文主要是分享下利用python爬取百度指定贴吧的全部帖子以及帖子回复内容,主要是利用python的request库获取网页信息,通过正则等方式解析我们需要的数据并存储到数据库中,并且后续可...

程序员技术栈
06/30
0
0
Python数据分析练手:分析知乎大V - 知乎

知乎,可以说是国内目前最大的问答类社区。与微博、贴吧等产品不同,知乎上面的内容更多是用户针对特定的问题分享知识、经验和见解。咱们编程教室就有不少读者是从知乎上了解到我们的。 那么...

Crossin的编程教室
2019/11/20
0
0
Python数据分析练手:分析知乎大V

原文链接:https://zhuanlan.zhihu.com/p/92768131?utmsource=tuicool&utmmedium=referral 知乎,可以说是国内目前最大的问答类社区。与微博、贴吧等产品不同,知乎上面的内容更多是用户针对...

osc_km8z9zfx
2019/11/21
14
0
1,Python前世今生

一,了解Python   Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由大神荷兰人Guido van Rossum(吉多·范罗苏姆)于1989年...

osc_11wdnyu0
2018/03/28
1
0
从零开始的Python爬虫指南 - 知乎

最近后台有人留言问:有没有python爬虫的相关教程,由于网上很多资料讲的过于散乱,不能很好的系统性学习爬虫,而且水平参差不齐。所以我特意花几天时间系统的整理了一下网上的爬虫教程,将网...

Python程序员
2019/10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

锁消除

锁消除 锁消除的意思是说虚拟机在运行时,虽然代码进行了同步,但是如果虚拟机检测到不存在数据竞争时,虚拟机就会自动把锁进行消除。锁消除主要的判定依据是如果堆上的所有数据都不会被其它...

米带网络科技有限公司
2019/07/05
7
0
【Paper】CTC Introduce

Connectionist Temporal Classification, an algorithm used to train deep neural networks in speech recognition, handwriting recognition and other sequence problems. 1. Problem don......

osc_cpolwgcv
15分钟前
11
0
CSRF攻击防御原理

Leafo老师基于Moonscript语言开发的WEB框架Lapis,框架中有一段针对CSRF(Cross—Site Request Forgery)的防护代码, 是一种基于围绕时间戳和签名验证的CSRF防护设计,后来Leafo老师还更新了...

糖果JAM
01/02
7
0
深入理解Linux VFS和Page Cache

戳蓝字「TopCoder」关注我们哦! 编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。 VFS(虚...

luoxn28
04/15
5
0
微风正在与我赛跑

阳光暖暖的抚摸着草儿 天空温柔的轻吻着云儿 微风正在与我赛跑 在草地上打几个滚 踢几脚球,赛几趟跑,捉几回迷藏 风轻悄悄的,草软绵绵的 是你让我体会到了大自然的美妙 回到家 是你教我 学...

瑾123
16分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部