【Python 实战】Python 采集度贴吧排行榜

数据采集
我们上一篇介绍了,如何采集电影评论,看看这个电影好不好看.今天,我们来采集大家熟悉的百度贴吧的排行榜。
发送请求
我们首先确定我们的目标网址,对我们需要获取的数据。
 
 我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看评论是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。
 
 我们这里可以看到,我们选择一个 css 选择器,取匹配我们要的数据。
代码使用requests库的get()函数来请求这个 URL,并将结果存储在变量res中。
解析数据
我们还可以获取其他信息,比如讲,排名,学校,人数,签到率之类的。
这段代码首先导入了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位置,接下来,就是把内容获取下来。我们看看代码怎么写。
这段代码将遍历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 文件,之前我们说了很多遍,直接上代码。
这段代码打开了一个名为“百度贴吧排行榜.csv”的文件,并创建了一个名为“csv_writer”的 CSV 写入器对象。mode='a'参数指定文件以追加模式打开,encoding='utf-8_sig'参数指定文件编码为 UTF-8-sig,newline=''参数指定行尾符为空字符串。
然后,csv_writer.writeheader()方法被调用,它将写入 CSV 文件的标题行。这些标题行包括排名、学校、签到人数、吧会员数和签到率。
我们把上面的数据保存成字典的格式,写入 csv 文件。
这段代码创建了一个字典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()函数将数据打印出来。
版权声明: 本文为 InfoQ 作者【BROKEN】的原创文章。
原文链接:【http://xie.infoq.cn/article/03046be0f9af31cff2dfc25cc】。文章转载请联系作者。











 
    
评论