继续创作,加速成长!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

数据收集

咱们上一篇介绍了,怎么收集电影谈论,看看这个电影好不好看.今日,咱们来收集大家熟悉的百度贴吧的排行榜。

发送恳求

咱们首要确认咱们的方针网址,对咱们需要获取的数据。

HRU1NZ%G$$~CY}CK%@N@P%R.png

咱们要把每一行的数据获取下来,咱们接下来用到开发者东西。咱们看谈论是在什么方位。是不是在网页源代码中。接下来,咱们发送恳求,获取网页源代码。

QQ图片20230416171822.png

咱们这儿能够看到,咱们挑选一个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值。

_IQ2SUO({D)))F{6$}YI){1.png

获取内容

咱们把获取到的内容保存成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文件中。

XFWUCHFEOQJW~5[OP@9JR.png

总结

本文介绍了怎么收集百度贴吧排行榜的数据。首要,咱们确认了方针网址并运用开发者东西获取了网页源代码。然后,咱们挑选了一个CSS挑选器并运用requests.get()函数恳求了方针网址。接下来,咱们运用parsel库解析了网页源代码,并运用Selector函数挑选了一切包括谈论的.j_rank_row类的元素。最终,咱们运用info_lists变量存储了每个元素的值,并运用print()函数将数据打印出来。