«

怎么使用Python采集某度贴吧排行榜

时间:2024-6-14 09:34     作者:韩俊     分类: Python


本篇内容介绍了“怎么使用Python采集某度贴吧排行榜”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

发送请求

我们首先确定我们的目标网址,对我们需要获取的数据。

我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看评论是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。

我们这里可以看到,我们选择一个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文件中。

标签: python

热门推荐