爬虫爬取糗事百科段子

目录

糗事百科段子爬取

感谢阅读最爱小鱼果的博客。

本篇博客在于记录本人学习爬虫过程中的一些项目案例,如有错误还请大家批评指正!

爬虫功能介绍

可获取糗事百科段子里当前所有用户ID,段子内容,点赞数。
注:因段子内容为随机,每次打开都会刷新内容,故每个人所看到的段子内容不一定相同

所需软件

1、浏览器(最好为Google Chrome
2、Python IDE(最好为PyCharm
Python3.0+

网页解析

首先打开糗事百科找到并点击段子,鼠标右键点击 检查,找到并点击Elements
如图所示:
爬虫爬取糗事百科段子

找到所需信息所在代码段

1、找到用户ID所在代码段,如图所示:
爬虫爬取糗事百科段子
2、找到段子内容所在代码段,如图所示:
爬虫爬取糗事百科段子
3、找到点赞数所在代码段,如图所示:
爬虫爬取糗事百科段子

获取信息

本篇博客使用正则表达式来提取信息

提取用户ID:

	r'<div class="author clearfix">.*?<h2>\n(.*?)\n</h2>

提取段子:

	r'<div class="content">.*?<span>(.*?)</span>

提取点赞数:

	r'<i class="number">(.*?)</i>'

这里就不多做解释了,看不懂的建议百度正则表达式。

编程思路分析

使用正则表达式可以一次性获取全部用户ID,段子,点赞数
但是是分开的,也就是说用户ID在一个列表里,段子内容在一个列表里,点赞数在一个列表里。
所以我们需要进行合并

获取当前所有段子

获取所有段子,需要遍历每一页里的信息,分析网页url:

第一页:

https://www.qiushibaike.com/text/page/1/

第二页

https://www.qiushibaike.com/text/page/2/

第三页
https://www.qiushibaike.com/text/page/3/

所以我们可以这样遍历:

    for x in range(1,14):
        url = 'https://www.qiushibaike.com/text/page/%s/' % x

这用就可以生成所有url.

对提取的内容进行优化

不难发现爬取的段子内容含有许多转义字符,如图所示:

爬虫爬取糗事百科段子
所以进行删除,既替换成空:

    for du in duans:
        nr = re.sub(r'\n|<.*?>|\xa0| ', "", du)
        ners.append(nr)

综上便获取到了我们所需要的信息。

数据合并

使用zip()函数进行数据合并:

    for val in zip(user, ners, xiao):
        user, nrs, xiao = val
        poom = {
            '用户': user,
            '内容': nrs,
            '点赞': int(xiao)
        }
        shi.append(poom)

至此我们就获取到了当前所有信息

查看点赞数最多的内容

突发奇想,想要看看点赞数最多的段子是啥内容,因此加上如下代码:

    shi.sort(key=lambda data: data["点赞"])
    print(shi[-1])

如图所示:
爬虫爬取糗事百科段子
图片不是很清楚放上文字:

用户: 上天揽九月、
内容: 闺蜜约我去看电影,到了电影院找到位子坐好。闺蜜在背包里掏出一大桶爆米花和一瓶可乐,递给我说:“电影院的零食贵死了,这是我在超市买的。”我怀着无尽的感动,一大口爆米花一口可乐,美滋滋看着电影,一桶爆米花快见底时,我问闺蜜:“你怎么不吃啊,都快被我吃完光了!”闺蜜摇摇头说:“你吃吧,我怕胖!”我…草率了~
点赞: 3164

总结

首先分析源代码,利用正则表达式获取所需信息,再对信息进行处理, 然后将所获取的信息进行合并。最后根据点赞数进行排序找到点赞数最多的段子并打印出来。

最后

感谢阅读最爱小鱼果的博客。

本篇博客在于记录本人学习爬虫过程中的一些项目案例,如有错误还请大家批评指正!

附代码

import requests
import re

xiaos = []
shi = []

def parse_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    text = response.text
    user = re.findall(r'<div class="author clearfix">.*?<h2>\n(.*?)\n</h2>', text, re.S)
    duans = re.findall(r'<div class="content">.*?<span>(.*?)</span>', text, re.S)
    xiao = re.findall(r'<i class="number">(.*?)</i>', text, re.S)
    ners= []
    for du in duans:
        nr = re.sub(r'\n|<.*?>|\xa0| ', "", du)
        ners.append(nr)
    for val in zip(user, ners, xiao):
        user, nrs, xiao = val
        poom = {
            '用户': user,
            '内容': nrs,
            '点赞': int(xiao)
        }
        xiaos.append(int(xiao))
        shi.append(poom)

def main():
    for x in range(1,14):
        url = 'https://www.qiushibaike.com/text/page/%s/' % x
        parse_page(url)
    shi.sort(key=lambda data: data["点赞"])
    print(shi[-1])
    # print(max(xiaos))

if __name__ == '__main__':
    main()
上一篇:Liunx shell的学习


下一篇:引入控制FontFallBack功能的新API!PPT管理控件Aspose.Slides v19.10重磅来袭!