前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高考倒计时100天,用python看看高三党

高考倒计时100天,用python看看高三党

作者头像
刘早起
发布2020-04-22 16:03:30
6510
发布2020-04-22 16:03:30
举报
文章被收录于专栏:早起Python

一、前言

本文为python爬虫+可视化系列第五篇,前几篇请猛戳文末链接~希望能通过详解一些简单的小项目来学习python。今天要做的是爬取百度贴吧高考吧的帖子来看看即将高考的同学们。

二、代码详解

首先来看看怎样从网站中拿到我们要的帖子标题信息,因为后面要循环去爬每一页所以我们写一个函数来爬,这里不用request也不用bs4等模块,我们使用之前文章讲过的mechanicalsoup去爬,来看代码

代码语言:javascript
复制
def get_title(full_url,result):    browser = mechanicalsoup.StatefulBrowser()
    browser.open(full_url)
    res = browser.get_current_page()
    tem = res.find_all('a')
    for tem1 in tem:
        tem2 = str(tem1.get('href'))
        title = str(tem1.get('title'))
        if len(tem2) == 13:
            result.append(title)
    return result

那么这个函数接收两个参数,一个是目标url,而result是一个空list用来存储标题,第一行用来创建一个浏览器实例,第二行是打开目标网站,第三行获取网页内容,第四到九行用来提取标题信息并存储到list中,最后将结果返回。

接下来因为我们需要爬高考吧前100页的帖子,所以我们先来看看每一页对应的链接有什么规律

看到这里,该如何生成每一页的链接我想就不用多说了,看代码

代码语言:javascript
复制
def patieba(url, beginPage, endPage,result):
    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50
        full_url = url + "&pn=" + str(pn)
        get_title(full_url,result)

最后附上完整代码(如果要爬更多页数注意请求频率和代理ip的设置哦)

代码语言:javascript
复制
import mechanicalsoup

def get_title(full_url,result):
    print(full_url)
    browser = mechanicalsoup.StatefulBrowser()
    browser.open(full_url)
    res = browser.get_current_page()
    tem = res.find_all('a')
    for tem1 in tem:
        tem2 = str(tem1.get('href'))
        title = str(tem1.get('title'))
        if len(tem2) == 13:
            result.append(title)
    return result
 
def patieba(url, beginPage, endPage,result):
    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50
        full_url = url + "&pn=" + str(pn)
        get_title(full_url,result)
        
if __name__ == '__main__':
    result = []
    beginPage = 1
    endPage = 10
    full_url = 'http://tieba.baidu.com/f?kw=高考'
    patieba(full_url, beginPage, endPage,result)

需要注意一点的是,在我们将高考吧的链接复制到编辑器中是不显示中文的,也就是我们看到浏览器中的链接是

代码语言:javascript
复制
http://tieba.baidu.com/f?kw=高考

但是实际上粘贴就成了

代码语言:javascript
复制
https://tieba.baidu.com/f?kw=%E9%AB%98%E8%80%83

这是因为浏览器对中文请求参数进行了转码,用代码访问网站所发的请求中如果有中文也必须是转码之后的。但因为我们使用的mechanicalsoup会对请求自动地进行urlencode,所以可以直接使用带中文的链接,如果是使用urllib去爬的话就需要进行下面一步转码

代码语言:javascript
复制
import urllib.parse
kw_url = "http://tieba.baidu.com/f?"
kw_key = urllib.parse.urlencode({"kw": kw})
full_url = kw_url + kw_key

三、数据分析

首先来看看泡在贴吧里的年级分布

可以看到虽然即将高考,但是贴吧里依旧是高三党占据了一大半,不过等等,怎么高考吧还混进几位初中生。再来看看文理科分布

总体来说,还是理科生更多一点,接着看大家最喜欢在贴吧讨论哪些学科

可以看到,最常常被提起的学科是数学,除了语数外讨论最多的是物理化学,难道是因为这些学科难?再来看看高三党们最想考的学校前十名

果然基本上想考的学校和大学实力成正比,不过光在贴吧发帖可不够哦,最后看下高考吧的词云图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、代码详解
  • 三、数据分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档