文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python采集某度贴吧排行榜实战示例

2023-05-16 15:12

关注

数据采集

我们上一篇介绍了,如何采集电影评论,看看这个电影好不好看.今天,我们来采集大家熟悉的百度贴吧的排行榜。

发送请求

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

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

我们这里可以看到,我们选择一个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函数创建了一个选择器对象selectorres.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文件中。

总结

本文介绍了如何采集百度贴吧排行榜的数据。首先,我们确定了目标网址并使用开发者工具获取了网页源代码。然后,我们选择了一个CSS选择器并使用requests.get()函数请求了目标网址。接下来,我们使用parsel库解析了网页源代码,并使用Selector函数选择了所有包含评论的.j_rank_row类的元素。最后,我们使用info_lists变量存储了每个元素的值,并使用print()函数将数据打印出来。

以上就是Python采集度贴吧排行榜实战示例的详细内容,更多关于Python采集度贴吧排行榜的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯