Python网络爬虫,利用正则表达式对百度贴吧进行爬取(非xpath)

本文介绍了如何使用Python通过requests和正则表达式技术从百度贴吧抓取帖子内容、评论和链接,实现多页数据的收集,适合初学者了解网页爬虫技术的应用。
部署运行你感兴趣的模型镜像

对百度贴吧的爬取,主要利用了request库和re库分别获取贴吧的包和内容,最后输出贴吧所有的评论和链接。

获取百度贴吧的界面内容



    def get_data(self, url):
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
                                 ' AppleWebKit/537.36 (KHTML, like Gecko)'
                                 ' Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.33'}
        response = requests.get(url, headers=headers)
        # with open("response.html", 'wb') as f:
        #     f.write(response.content)
        # print(response.text)

        # 利用content返回字符串bytes,并利用decode进行编译
        return response.content.decode()


headers是本人浏览器的表头,以自己浏览器为主。
request.get(url)获取url的内容。

释放注释内容

高级浏览器会自动把展示的内容作为注释,调用注释的内容,因此我们需要将注释的内容给提取出现。



		# 请求获得界面
        data = self.get_data(next_url)
        # 把高等级浏览器注释掉的部分释放出来
        data = data.replace('<!--,', '').replace('-->', '')
        
        

如果学过html,应该很容易想到注释的语法,利用<!–" 和 “–>” 将内容括起来,因此我们需要利用字符串替换方法replace将注释语法去除。

利用正则表达式获取贴吧单个页面的帖子和链接

在对贴吧内容的提取上有很多种方式,xpath、re、直接对标签的查询等,这些方式都能让我们快速找到。(虽然xpath确实非常快,但是因为re学习比较得心应手,因此习惯用re了)



		# 正则获得贴吧信息和url
        get_url = re.findall(r'a rel=\".*\" href=\"(.*)\" title=\".*\" target=\"_blank\" class=\"j_th_tit', data)
        get_title = re.findall(r'a rel=\".*\" href=\".*\" title=\"(.*)\" target=\"_blank\" class=\"j_th_tit', data)


对得到的评论和链接进行处理

在得到其内容后,我们需要将评论和链接给对上,不可能放成一团,这样我们就不知道评论对应的链接,在数据可视化上比较差。

		# (获得url只有尾数,得在前面添加https://tieba.baidu.com)
        data_list = []
        for item in range(0, len(get_title)):
            temp = {}
            temp['title'] = get_title[item]
            temp['url'] = 'https://tieba.baidu.com' + get_url[item]
            data_list.append(temp)

这里可以利用字典,将内容放入,以方便我们提取。

循环翻页获取内容

一般的帖子肯定不止一页,因此我们需要对帖子进行翻页,直到最后一页。

        # 循环翻页获得页面信息,利用try进行判断,如果错误则表示到页数限制
        try:
            # 后面的url需要加前缀https:
            next_url = 'https:' + re.findall(r'href=\"(.*)\" class=\".*\" >下一页', data)[0]
        except:
            next_url = None
        for show_data in data_list:
            print(show_data)
        print(next_url)

最后在给出主函数



if __name__ == '__main__':
    url = 'https://tieba.baidu.com/f?ie=utf-8&kw='
    name = '洛杉矶湖人'
    next_url = url + name
    baidu = Baidu()
    # 循环利用下一页next_url,当next_url为空时到达最后一页,完成提取。
    while True:
        next_url = baidu.run(next_url)
        if next_url == None:
            break


补充run函数模块



    def run(self, next_url):
        # 获取url
        # headers
        # 请求获得界面
        data = self.get_data(next_url)
        # 把高等级浏览器注释掉的部分释放出来
        data = data.replace('<!--,', '').replace('-->', '')

        # 正则获得贴吧信息和url
        get_url = re.findall(r'a rel=\".*\" href=\"(.*)\" title=\".*\" target=\"_blank\" class=\"j_th_tit', data)
        get_title = re.findall(r'a rel=\".*\" href=\".*\" title=\"(.*)\" target=\"_blank\" class=\"j_th_tit', data)
        # (获得url只有尾数,得在前面添加https://tieba.baidu.com)
        data_list = []
        for item in range(0, len(get_title)):
            temp = {}
            temp['title'] = get_title[item]
            temp['url'] = 'https://tieba.baidu.com' + get_url[item]
            data_list.append(temp)
        # print(temp)
        # 循环翻页获得页面信息,利用try进行判断,如果错误则表示到页数限制
        try:
            # 后面的url需要加前缀https:
            next_url = 'https:' + re.findall(r'href=\"(.*)\" class=\".*\" >下一页', data)[0]
        except:
            next_url = None
        for show_data in data_list:
            print(show_data)
        print(next_url)
        return next_url


源文件地址:https://download.youkuaiyun.com/download/Single_minde/85624706

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Single_minde

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值