欢迎访问的小伙伴! 希望在这里能帮到你。有问题请多多指教~ 点击联系站长

糗事百科段子爬虫实战,七夕情人节给你加点料。

Python 焦康阳 0评论

大家好,这里是小焦。说今天的项目之前,我们先来说说题外话。今天是一年一度的七夕情人节,作为一个单身狗,在这个欢快的节日里,当然还是努力学习,努力挣钱养家糊口呗。也希望尽快找到可以托付一生的另一半吧。好了,开始今天的小爬虫吧。

所谓说任何技术知识,学的再好不如练得好。最近我也是深有体会,书上的知识一看一个懂,下来写代码一脸懵逼。也是让我这个python小白很是郁闷,偶然看到知乎上一个大神一句话,让我醍醐灌顶。多看书不如多练习,可以在练习过程中,用到什么知识立马去学,然后学以致用,这样才可以达到高效率,一味的看书只会前学后忘。

确实,我之前老是抱着把一个阶段的东西看完,然后再写代码,可是当我去写得的时候发现学的已经忘得差不多了。而且在本次的项目中,我发现之前好的小知识点可以起到不小的作用。

糗事百科爬虫案例

好了,前面讲了一堆废话开始我们的正题。我们今天项目是糗事百科网站段子的爬虫。生活无趣,那就找点有意思的东西看看,本次这个网站就是一个原创笑话网站,看了一个段子也是非常的搞笑。

要准备的知识点

  • python3
  • requests库
  • pyquery库
  • 网站链接:https://www.qiushibaike.com/

我们要爬的这个网站非常简单,是一个静态网站,我们只需用requests和pyquery这两个库就能达到我们的要求了。首先我们就是分析网站内容,非常简单,万能的F12,我们只需在内容部分右键检查,然后就能查看它的源代码了。

从上面的源码中,非常简单明了的看到,一个文章包含在div中,我们只需点开,一层一层剥开块元素下面的内容,找出我们需要的内容在哪就行了。然后用pyquey库进行解析即可。

本次主要我们目标是是爬取作者的昵称、年龄、性别、内容、点赞数和评论数。这块就不详细展开说,我这边直接列出代码吧,每行内容我都有备注哦。

#2020.8.22  糗事百科爬虫
#焦康阳  个人博客:https://jiaokangyang.com
#功能:本次爬虫主要完成对糗事百科的段子爬取


import requests
from pyquery import PyQuery as pq

#先写一个函数进行网页内容爬取,并返回内容
def download_qiushi(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4208.400',

    }
    a = requests.get(url,headers=headers)
    return a.text

#该函数完成对网页内容分析,下载

def get_content(html,page):
    #这块预先设置一个字符串,等会将获取到内容利用format方法填充到里面
    shuchu = """第{}页 作者:{} 性别:{} 年龄:{} 喜欢:{} 评论:{}  \n原文链接:{}\n\n{}\n-----------------\n"""

    url = 'https://www.qiushibaike.com'

    a = pq(html)
    lists = a('.article').items()

    for list in lists:
        #获取作者名字
        author = list('.author a h2').text()
        #获取内容
        content = list('.content span').text()
        #喜欢的人数
        vote = list('.stats .stats-vote .number').text()
        #获取评论数
        comments =  list('.stats .stats-comments .number').text()

        #原文链接
        href = url + str(list('.contentHerf').attr('href'))
        #获取作者的年龄和性别
        author_info = list('.articleGender')
        if author_info is not None:  #这块判断是否为匿名用户
            class_list = author_info.attr('class')  #获取class属性,然后对比是否为男女属性
            if 'womenIcon' in class_list:  #网页源码中女性用的是womenIcon 样式,我们只需对比
                gender = '女'
            elif 'manIcon' in class_list:
                gender = '男'
            else:
                gender = ''

            age = author_info.text()  #获取作者年龄
        else:    #如果没有的话就给性别年龄赋值为空
            gender = ''
            age = ''

        #将获取到内容用format方法填充,并将内容保存到文件
        save_txt(shuchu.format(page,author,gender,age,vote,comments,href,content))

#此方法将文件保存到qiushi,txt文件中
def save_txt(*args):
    for i in args:
        with open('qiushi.txt','a',encoding='utf-8') as f:
            f.write(i)


def main():
    #内容较多,我们设置爬取前三页的内容
    for i in range(1,4):
        url = 'https://qiushibaike.com/text/page{}'.format(i)
        print('开始爬取第%d页'%i)
        html = download_qiushi(url)
        get_content(html, i)
        print('爬取完成')

    print('所有内容爬取完毕,请打开文件查看')

if __name__ == '__main__':
    main()

代码已经放到上面,为了调用和修改方便,我是将每个实现的内容写成函数的格式。有不清楚的可以留言哦。

源码下载地址

https://github.com/zhanjiuyou/qiushibaike.git

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址