Python采集某度贴吧排行榜实战示例
作者:极客飞虎 发布时间:2022-03-08 21:07:17
数据采集
我们上一篇介绍了,如何采集电影评论,看看这个电影好不好看.今天,我们来采集大家熟悉的百度贴吧的排行榜。
发送请求
我们首先确定我们的目标网址,对我们需要获取的数据。
我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看评论是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。
我们这里可以看到,我们选择一个css选择器,取匹配我们要的数据。
url = f'https://tieba.baidu.com/sign/index?kw=%B0%B2%C7%EC%CA%A6%B7%B6%D1%A7%D4%BA&type=2&pn=1' # 158
res = requests.get(url)
代码使用requests
库的get()
函数来请求这个URL,并将结果存储在变量res
中。
解析数据
我们还可以获取其他信息,比如讲,排名,学校,人数,签到率之类的。
selector = parsel.Selector(res.text)
info_lists = selector.css('.j_rank_row')
这段代码首先导入了parsel
库,然后使用Selector
函数创建了一个选择器对象selector
。res.text
是从响应中获取的文本内容,css()
方法用于选择CSS样式,.j_rank_row
是CSS选择器,用于选择所有.j_rank_row
类的元素。
接下来,代码使用selector.css()
方法选择所有.j_rank_row
类的元素,并将它们存储在info_lists
变量中。这些元素将成为BeautifulSoup对象soup
的一部分。
获取内容
上面我们已经得到了.j_rank_row
位置,接下来,就是把内容获取下来。我们看看代码怎么写。
for info_list in info_lists:
rank = info_list.css('.rank_index div::text').get()
# print(rank)
name = info_list.css('.forum_name a::text').get()
signin = info_list.css('.forum_sign_num::text').get()
theTotalNumberOf = info_list.css('.forum_member::text').get()
signInToRate = info_list.css('.forum_sign_rate::text').get()
这段代码将遍历info_lists
列表中的每个元素,并使用CSS选择器选择.rank_index
类的元素,然后使用.rank_index div::text
选择.rank_index
类的文本内容,使用.forum_name a::text
选择.forum_name
类的文本内容,使用.forum_sign_num::text
选择.forum_sign_num
类的文本内容,使用.forum_member::text
选择.forum_member
类的文本内容,使用.forum_sign_rate::text
选择.forum_sign_rate
类的文本内容。
然后,代码将获取每个元素的.rank_index div::text
文本内容,并使用.get()
方法获取其中的.rank_index
值。接下来,代码将获取每个元素的.forum_name a::text
文本内容,并使用.get()
方法获取其中的.forum_name
值。接下来,代码将获取每个元素的.forum_sign_num::text
文本内容,并使用.get()
方法获取其中的.forum_sign_num
值。接下来,代码将获取每个元素的.forum_member::text
文本内容,并使用.get()
方法获取其中的.forum_member
值。最后,代码将获取每个元素的.forum_sign_rate::text
文本内容,并使用.get()
方法获取其中的.forum_sign_rate
值。
获取内容
我们把获取到的内容保存成csv文件,之前我们说了很多遍,直接上代码。
f = open('百度贴吧排行榜.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['排名', '学校', '签到人数', '吧会员数', '签到率'])
csv_writer.writeheader()
这段代码打开了一个名为“百度贴吧排行榜.csv”的文件,并创建了一个名为“csv_writer”的CSV写入器对象。mode='a'
参数指定文件以追加模式打开,encoding='utf-8_sig'
参数指定文件编码为UTF-8-sig,newline=''
参数指定行尾符为空字符串。
然后,csv_writer.writeheader()
方法被调用,它将写入CSV文件的标题行。这些标题行包括排名、学校、签到人数、吧会员数和签到率。
我们把上面的数据保存成字典的格式,写入csv文件。
dit = {
'排名': rank,
'学校': name,
'签到人数': signin,
'吧会员数': theTotalNumberOf,
'签到率': signInToRate,
}
# print(dit)
csv_writer.writerow(dit)
这段代码创建了一个字典dit
,其中包含了每个元素的值。然后,它使用csv_writer.writerow()
方法将字典写入CSV文件中。
具体来说,这段代码首先打开了一个名为“百度贴吧排行榜.csv”的文件,并创建了一个名为“csv_writer”的CSV写入器对象。然后,它使用csv_writer.writeheader()
方法写入了CSV文件的标题行,包括排名、学校、签到人数、吧会员数和签到率。最后,它使用csv_writer.writerow()
方法将字典dit
写入CSV文件中。
来源:https://juejin.cn/post/7222531019320672311


猜你喜欢
- C#调用python脚本在平常工程项目开发过程中常常会涉及到机器学习、深度学习算法方面的开发任务,但是受限于程序设计语言本身的应用特点,该类
- Softmax回归函数是用于将分类结果归一化。但它不同于一般的按照比例归一化的方法,它通过对数变换来进行归一化,这样实现了较大的值在归一化过
- 方法一(不使用模块,by agonyr)#!/usr/bin/perl -wuse strict;my @seq = ( "A&q
- 这篇文章主要介绍了python scrapy重复执行实现代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 在介绍完给图上添加文字后,我们再介绍给图片上添加图片,也就是图片的叠加。需要使用的Python的图像库:PIL.更加详细的知识点如下:Ima
- 存储文件的重要一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,。 默认数据是加载到
- 本文实例讲述了JS+HTML实现的圆形可点击区域。分享给大家供大家参考,具体如下:方法一:<img>通过usemap映射到<
- 根据Django官方文档介绍:A one-to-one relationship. Conceptually, this is simila
- 解决方法:1.首先你需要在自己的app下面创建2个目录 static 和 templatesstatic下存放静态文件,templates下
- 我就废话不多说了,大家还是直接看代码吧!# coding=utf-8import loggingimport yamlimport osim
- mysql_query("set autocommit=0"); $list_one = $db->fetch_f
- 安装了pycharm之后有一个新装的python解释器,顶替了之前系统的python那样的话,原来利用pip安装的一些库会无法import.
- 页面大小、窗口大小和滚动条位置这三个数值在不同的浏览器例如Firefox和IE中有着不同的实现。即使在同一种浏览器例如IE中,不同版本也有不
- 导读我们在使用selenium打开google浏览器的时候,默认打开的是一个新的浏览器窗口,而且里面不带有任何的浏览器缓存信息。当我们想要爬
- 最近用sysbench进行了较多的性能测试,也总结一下它的特点和用法和需要注意的事项。sysbench是一个多线程性能测试工具,可以进行CP
- 前言:什么是分布式事务?银行跨行转账业务是一个典型分布式事务场景,假设A需要跨行转账给B,那么就涉及两个银行的数据,无法通过一个数据库的本地
- 要求,输入一串数字,并以列表的形式打印出来。number = input('请输入一串数字:') print(number)
- 本文实例讲述了Python编程中event对象的用法。分享给大家供大家参考,具体如下:Python提供了Event对象用于线程间通信,它是由
- 本文实例讲述了Python直接赋值、浅拷贝与深度拷贝。分享给大家供大家参考,具体如下:直接赋值:其实就是对象的引用(别名)。浅拷贝(copy
- 如何根据二维数组中的某一行或者某一列排序?假设data是一个numpy.array类型的二维数组,可以利用numpy中的argsort函数进