Python - 爬虫简书推荐作者

字数 575阅读 228

本人小白 - 正在学习python突然看到爬虫很有意思就过来试试看

robot协议 在每个网站的跟域名加上/robots.txt即可访问文档 例如 www.baidu.com/robots.txt

引入包

import requests
from bs4 import BeautifulSoup

发送请求

header = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0'}
response = requests.get(url, headers=header)
html = response.text

解析html页面结构找到放置数据的标签
查看html结构之后可以看到作者整个数据在div class="wrap" div中

authors_info = soup.find_all('div',class_='wrap')

结果是这样的,结构很明了,就展示了一条数据 方便查看

[<div class="wrap">
<a href="/users/b3b2c03354f3" target="_blank">
<img alt="180" class="avatar" src="//upload.jianshu.io/users/upload_avatars/3343569/93161bfa-dda9-49ee-88e1-a85ec4227232.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/180/h/180"/>
<h4 class="name">
        吴晓布

      </h4>
<p class="description">顺丰速运集团前高管,现某创业公司合伙人兼CT...</p>
</a>
<div class="follow-button" props-data-following="false" props-data-user-id="3343569"></div>
<hr/>
<div class="meta">最近更新</div>
<div class="recent-update">
<a class="new" href="/p/b0a42bc9be31" target="_blank">知识结构 | 如何构建你的知识结构</a>
<a class="new" href="/p/6bfcdc3d0bb3" target="_blank">致读者:没有过不去的坎,只有过不完的坎</a>
<a class="new" href="/p/4ee2e11e454e" target="_blank">摄影实战 | 如何用无人机拍出精彩风光大片的技巧清单</a>
</div>
</div>]

他们的个人页面在<a href="/users/b3b2c03354f3" target="_blank">里,所以得获取个人页面的路径加上
https://www.jianshu.com+a标签的内容即可
注意这里是数组,所以不能直接取得a标签 循环一下即可

['/users/b3b2c03354f3', '/users/e0ef486d9b90', '/users/c5580cc1c3f4', '/users/5f27d4962af5', '/users/ffc565d738a3', '/users/b91cc2d507d0', '/users/55b597320c4e', '/users/7406f22f461e', '/users/4062aaeba322', '/users/08e6960f7ed9', '/users/00e4497354ac', '/users/b67d47b0505a', '/users/a67ad639eb06', '/users/0044a6881d5e', '/users/98935ac50373', '/users/9607c7976e1c', '/users/86b81ed8e35c', '/users/92eb338437ee', '/users/0c5379fd193e',
'/users/1446a350e58a', '/users/7591e24c8494', '/users/13cba2dc6b23', '/users/9d73eac9d201', '/users/b52ff888fd17']

下一步需要做的就是把每一项加入https://www.jianshu.com前缀 循环时加入即可

['https://www.jianshu.com/users/b3b2c03354f3', 'https://www.jianshu.com/users/e0ef486d9b90', 
'https://www.jianshu.com/users/c5580cc1c3f4', 'https://www.jianshu.com/users/5f27d4962af5', 
'https://www.jianshu.com/users/ffc565d738a3', 'https://www.jianshu.com/users/b91cc2d507d0',
 'https://www.jianshu.com/users/55b597320c4e', 'https://www.jianshu.com/users/7406f22f461e', 
'https://www.jianshu.com/users/4062aaeba322', 'https://www.jianshu.com/users/08e6960f7ed9', 
'https://www.jianshu.com/users/00e4497354ac', 'https://www.jianshu.com/users/b67d47b0505a', 
'https://www.jianshu.com/users/a67ad639eb06', 'https://www.jianshu.com/users/0044a6881d5e',
 'https://www.jianshu.com/users/98935ac50373', 'https://www.jianshu.com/users/9607c7976e1c',
 'https://www.jianshu.com/users/86b81ed8e35c', 'https://www.jianshu.com/users/92eb338437ee', 
'https://www.jianshu.com/users/0c5379fd193e', 'https://www.jianshu.com/users/1446a350e58a', 
'https://www.jianshu.com/users/7591e24c8494', 'https://www.jianshu.com/users/13cba2dc6b23', 
'https://www.jianshu.com/users/9d73eac9d201', 'https://www.jianshu.com/users/b52ff888fd17']

下一步就是分析作者页面看页面结构


以我的举个例子.png

可以清楚的看到页面结构 也就是说这里才是我们要解析的结构


结构清晰了.png

这里就要用到很骚气的BeautifulSoup

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
这是文档地址 安装引入就不说了哦 真的好强大

需要的数字 都在p标签里
作者姓名在a class="name" 标签里 so 剩下的就很简单了

soup = BeautifulSoup(html, 'html.parser')         //html解析 官网文档有详细介绍
author_info = soup.find_all('div',class_='info')[0]
author_info_name = soup.find_all('a',class_='name')[0]

获取div class="info"

<div class="info">
    <ul>
        <li>
            <div class="meta-block">
                <a href="/users/b3b2c03354f3/following">
                    <p>93</p>
                    关注
                    <i class="iconfont ic-arrow"></i>
                </a>
            </div>
        </li>
        <li>
            <div class="meta-block">
                <a href="/users/b3b2c03354f3/followers">
                    <p>92526</p>
                    粉丝
                    <i class="iconfont ic-arrow"></i>
                </a>
            </div>
        </li>
        <li>
            <div class="meta-block">
                <a href="/u/b3b2c03354f3">
                    <p>172</p>
                    文章
                    <i class="iconfont ic-arrow"></i>
                </a>
            </div>
        </li>
        <li>
            <div class="meta-block">
                <p>507641</p>
                <div>字数</div>
            </div>
        </li>
        <li>
            <div class="meta-block">
                <p>10092</p>
                <div>收获喜欢</div>
            </div>
        </li>
    </ul>
</div>

然后获取所有info里的数字

author_info_numbers = author_info.find_all('p')

获取到作者名 还有所有数据存储的地方

吴晓布
[93, 92523, 172, 507641, 10092]
寻麦
[62, 110857, 126, 252938, 4365]
简书大学堂
[42, 221019, 293, 494557, 13052]
文字怪人
[103, 74240, 33, 134591, 8386]
格列柯南
[170, 85561, 309, 570692, 12707]
冰千里
[8, 89311, 142, 354906, 4234]
简书版权
[46, 286461, 232, 400041, 31260]
雨落荒原
[151, 97188, 77, 285370, 3418]
念远怀人
[38, 78876, 190, 514656, 4898]
须僧
[22, 60215, 36, 125810, 875]
经年鲤
[90, 23148, 87, 388741, 1915]
叶凝惋潇
[9, 32936, 64, 241658, 174]
小托夫
[47, 23470, 38, 270325, 673]
儿童性教育老师胡佳威
[14, 28964, 48, 112042, 272]
赫连伯伯
[22, 30528, 53, 105873, 516]
旸晓昆
[86, 10838, 14, 77134, 247]
乔汉童
[47, 26982, 130, 462652, 1086]
道长是名思维贩子
[28, 70155, 46, 156259, 39115]
狼医生
[43, 21590, 100, 384217, 896]
aloho
[28, 49276, 70, 609433, 495]
陈慕妤
[24, 61319, 117, 419132, 53350]
汪波_偶遇科学
[74, 61021, 57, 241599, 1077]
孙一杯
[14, 7518, 16, 99887, 208]
简宝玉
[17, 193588, 118, 80783, 14640]

稍作处理

[['吴晓布', [93, 92600, 172, 507641, 10094]],
 ['寻麦', [62, 110935, 126, 252938, 4365]],
 ['简书大学堂', [42, 221094, 293, 494557, 13053]], 
['文字怪人', [103, 74318, 33, 134591, 8386]],
 ['格列柯南', [170, 85636, 309, 570692, 12708]],
 ['冰千里', [8, 89384, 142, 354906, 4235]], 
['简书版权', [46, 286538, 232, 400041, 31263]], 
['雨落荒原', [151, 97262, 77, 285370, 3420]],
 ['念远怀人', [38, 78951, 190, 514656, 4902]],
 ['须僧', [22, 60289, 36, 125810, 875]], 
['经年鲤', [90, 23152, 87, 388741, 1916]],
 ['叶凝惋潇', [9, 32940, 64, 241658, 174]], 
['小托夫', [47, 23474, 38, 270325, 673]],
 ['儿童性教育老师胡佳威', [14, 28969, 48, 112042, 272]], 
['赫连伯伯', [22, 30532, 53, 105873, 516]], 
['旸晓昆', [86, 10842, 14, 77134, 247]], 
['乔汉童', [47, 26985, 130, 462652, 1086]],
['道长是名思维贩子', [28, 70158, 46, 156259, 39115]],
 ['狼医生', [43, 21593, 100, 384217, 896]], 
['aloho', [28, 49279, 70, 609433, 495]],
 ['陈慕妤', [24, 61322, 117, 419132, 53352]],
 ['汪波_偶遇科学', [74, 61024, 57, 241599, 1077]],
['孙一杯', [14, 7520, 16, 99887, 208]], 
['简宝玉', [17, 193596, 118, 80783, 14640]]]

写到这里已经2018-6-28 21:52:44,下班很久了,但是很开心 python小白露出诡异傲娇的笑容
然后在给这些"死数据" 添加点内容

-----------------------------------
 作者姓名: 吴晓布
 获得: 93 关注
 作者拥有: 92621 个分数
 共写了: 172 篇
 共写了: 507641 字
 收获: 10094 个喜欢
-----------------------------------
 作者姓名: 寻麦
 获得: 62 关注
 作者拥有: 110957 个分数
 共写了: 126 篇
 共写了: 252938 字
 收获: 4365 个喜欢
-----------------------------------
 作者姓名: 简书大学堂
 获得: 42 关注
 作者拥有: 221114 个分数
 共写了: 293 篇
 共写了: 494557 字
 收获: 13054 个喜欢
-----------------------------------
 作者姓名: 文字怪人
 获得: 103 关注
 作者拥有: 74340 个分数
 共写了: 33 篇
 共写了: 134591 字
 收获: 8386 个喜欢
-----------------------------------
 作者姓名: 格列柯南
 获得: 170 关注
 作者拥有: 85658 个分数
 共写了: 309 篇
 共写了: 570692 字
 收获: 12708 个喜欢
-----------------------------------
 作者姓名: 冰千里
 获得: 8 关注
 作者拥有: 89404 个分数
 共写了: 142 篇
 共写了: 354906 字
 收获: 4235 个喜欢
-----------------------------------
 作者姓名: 简书版权
 获得: 46 关注
 作者拥有: 286559 个分数
 共写了: 232 篇
 共写了: 400041 字
 收获: 31263 个喜欢
-----------------------------------
 作者姓名: 雨落荒原
 获得: 151 关注
 作者拥有: 97282 个分数
 共写了: 77 篇
 共写了: 285370 字
 收获: 3420 个喜欢
-----------------------------------
 作者姓名: 念远怀人
 获得: 38 关注
 作者拥有: 78972 个分数
 共写了: 190 篇
 共写了: 514656 字
 收获: 4902 个喜欢
-----------------------------------
 作者姓名: 须僧
 获得: 22 关注
 作者拥有: 60309 个分数
 共写了: 36 篇
 共写了: 125810 字
 收获: 875 个喜欢
-----------------------------------
 作者姓名: 经年鲤
 获得: 90 关注
 作者拥有: 23153 个分数
 共写了: 87 篇
 共写了: 388741 字
 收获: 1916 个喜欢
-----------------------------------
 作者姓名: 叶凝惋潇
 获得: 9 关注
 作者拥有: 32940 个分数
 共写了: 64 篇
 共写了: 241658 字
 收获: 174 个喜欢
-----------------------------------
 作者姓名: 小托夫
 获得: 47 关注
 作者拥有: 23473 个分数
 共写了: 38 篇
 共写了: 270325 字
 收获: 673 个喜欢
-----------------------------------
 作者姓名: 儿童性教育老师胡佳威
 获得: 14 关注
 作者拥有: 28969 个分数
 共写了: 48 篇
 共写了: 112042 字
 收获: 272 个喜欢
-----------------------------------
 作者姓名: 赫连伯伯
 获得: 22 关注
 作者拥有: 30532 个分数
 共写了: 53 篇
 共写了: 105873 字
 收获: 516 个喜欢
-----------------------------------
 作者姓名: 旸晓昆
 获得: 86 关注
 作者拥有: 10841 个分数
 共写了: 14 篇
 共写了: 77134 字
 收获: 247 个喜欢
-----------------------------------
 作者姓名: 乔汉童
 获得: 47 关注
 作者拥有: 26984 个分数
 共写了: 130 篇
 共写了: 462652 字
 收获: 1086 个喜欢
-----------------------------------
 作者姓名: 道长是名思维贩子
 获得: 28 关注
 作者拥有: 70159 个分数
 共写了: 46 篇
 共写了: 156259 字
 收获: 39115 个喜欢
-----------------------------------
 作者姓名: 狼医生
 获得: 43 关注
 作者拥有: 21593 个分数
 共写了: 100 篇
 共写了: 384217 字
 收获: 896 个喜欢
-----------------------------------
 作者姓名: aloho
 获得: 28 关注
 作者拥有: 49280 个分数
 共写了: 70 篇
 共写了: 609433 字
 收获: 495 个喜欢
-----------------------------------
 作者姓名: 陈慕妤
 获得: 24 关注
 作者拥有: 61321 个分数
 共写了: 117 篇
 共写了: 419132 字
 收获: 53352 个喜欢
-----------------------------------
 作者姓名: 汪波_偶遇科学
 获得: 74 关注
 作者拥有: 61024 个分数
 共写了: 57 篇
 共写了: 241599 字
 收获: 1077 个喜欢
-----------------------------------
 作者姓名: 孙一杯
 获得: 14 关注
 作者拥有: 7521 个分数
 共写了: 16 篇
 共写了: 99887 字
 收获: 208 个喜欢
-----------------------------------
 作者姓名: 简宝玉
 获得: 17 关注
 作者拥有: 193597 个分数
 共写了: 118 篇
 共写了: 80783 字
 收获: 14640 个喜欢

2018-6-28 22:12:20

wo zhong yu xie chu lai le !! 坚持就是胜利

完结 撒花

  • 遇到但是没用的包

    • Numpy
    • Counter
    • Collections
      这些我也不知道是啥 明天再看吧
  • 遇到的问题

    • 就是数据结构,python中有太多list[] set() tuple dict{}
    • 基本语法薄弱,才会导致用这么久 花了我大概3个多将近4个小时 期间又写了个处理log日志的脚本 多看多练就ok了

看到的同学可以一起学习一起交流 也希望有个大神带一带 交流交流意见


回家

推荐阅读更多精彩内容