程序员

看看简书的作者在写些啥(上)—-抓取简书博文

我在简书写文章还不到一万字,写的过程中,我发现,虽然我写的都是关于Python的内容,但是不同方向的文章受关注度差异很大:

我自己的博文,正好能截个图

就萌生出想看看,简书的读者到底喜欢看些啥的想法。

下面来介绍一下我用python抓取程序员专题的最近10000篇文章标题,及其阅读量、评论数、喜欢数的整个过程。


抓取过程选用的比较易于操作,但是效率比较低的方式。

工具:

Python第三方库:BeautifulSoup,selenium,chromedriver.exe(2.26)
BeautifulSoup:用来解析网页源代码,提取其中的数据;
selenium:因为简书使用的是滚动翻页,为了抓取多页数据,最简单的方法就是用selenium模拟人的操作,进行滚动翻页,然后再抓取;
chromedriver.exe: 这里我使用的是chrome,如果你用别的浏览器就要下载不同的驱动小程序(我印象中Firefox好像可以直接用),特别强调,最好选择最新的2.26版本,我试了两个别的版本的都报错了。

准备工作:

最近我发现用pip安装第三方库的时候,总是会出现网络错误,所以推荐大家使用国内源。

清华源:https://pypi.tuna.tsinghua.edu.cn/simple(好用)
豆瓣源:http://pypi.douban.com/simple/
阿里源:http://mirrors.aliyun.com/pypi/simple/

在命令行输入:pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple 就可以安装BeautifulSoup了
然后用 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 安装selenium

最后下载chromedriver.exe, 把它放在Python的安装文件夹里面,就算准备完成了。

思路:

  1. 使用selenium进行翻页操作;
    driver = webdriver.Chrome('C:\Python34\Scripts\chromedriver.exe')#这里参数可选,如果不填的话会自动搜索,尽量放在Python文件夹里面。
    driver.get("http://www.jianshu.com/collection/NEt52a")
    #翻页功能
    for i in range(1000):
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
    time.sleep(1)#给浏览器一秒的加载时间,因此这个程序运行速度并不快,主要的时间就花在这上面了
    #获取当前源代码
    html = driver.page_source

  2. 使用BeautifulSoup处理网页;
    抓取标题:
    用BeautifulSoup里的CSS选择器来抓取,很快。
    titles = []
    soup1 = BeautifulSoup(html,"html.parser")
    for i in range(len(soup1.select('h4[class="title"]'))):
    titles.append(soup1.select('h4[class="title"]')[i].get_text())

    阅读量:
    比抓取标题多一个提取数字的步骤
    a = re.compile(r'\d+')
    ReadTimes[i] = int(a.findall(ReadTimes[i])[0])#提取数字

    其他的评论数,喜欢数也是一样的,至于打赏……实在是比较罕见,就没有收集了。

  3. 将数据存入文件中。
    f = open("Title.txt","w+",encoding='utf-8')#注意这里编码需要改一下,要不然碰到标题里面带有奇怪字符的就会报错。
    for i in range(len(titles)):
    f.write(titles[i]+ '\n')
    f.close()

简单结果展示:

我们来看一看程序员专题下大家都在讨论什么。
这里我用万能的正则表达式简单地匹配了一下关键词,一些我没有听说过的东西就归入了小众工具了。

话题分布图

下一期我们看看利用这些数据可以分析出什么有意思的东西来。