Python获取幽默笑话大全

2021-07-09  本文已影响0人  爱写代码的小王子

前言:
本次我们需要爬取幽默笑话大全里的各种搞笑内容,当然还是使用上次我们提到的BeautifulSoup这个库,它的功能很强大,是本次爬取搞笑内容必不可少的工具。

接下来我们就爬取我们想要的内容吧,首先我们导入需要的库

import requests
from bs4 import BeautifulSoup

然后获取url地址页面内容,这里的headers是模拟浏览器来访问服务器,这里可以避免网页反爬取时报错

def download_page(url):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
    r = requests.get(url,headers=headers)
    return r.text

然后将获取的url地址页面内容传入BeautifulSoup,生成soup对象

 output = """第{}页 作者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n"""
    soup = BeautifulSoup(html,'html.parser')

找到对应的标签获取作者姓名

con = soup.find(id='content-left')
    con_list = con.find_all('div',class_="article")
    for i in con_list:
        author = i.find('h2').string #获取作者名字

获取笑话的内容

 content = i.find('div',class_'content').find('span').get_text() #获取内容

然后获取评论和好笑数量

 stats = i.find('div',class_='stats')
        vote = stats.find('span',class_='stats-vote').find('i',class_='number').string
        comment = stats.find('span',class_='stats-comments').find('i',class_='number').string

最后获取作者年龄,性别

 author_info = i.find('div',class_='articleGender') #获取作者 年龄,性别
        if author_info is not None: #非匿名用户
            class_list = author_info['class']
            if "womenIcon" in class_list:
                gender = '女'
            elif "manIcon" in class_list:
                gender = '男'
            else:
                gender = ''
            age = author_info.string # 获取年龄
        else: # 匿名用户
            gender = ''
            age = ''
            
        save_text(output.format(page,author,gender,age,vote,commentent,contentent))

然后将我们爬取的内容保存到记事本

def save_text(*args):
    for i in args:
        with open('qiubai.txt','a',encoding='utf-8') as f:
            f.write(i)

最后在程序的入口调用我们对应的方法

def main():
    #我们点击下面链接,在页面下方可以看到共有13页,可以构造如下 url
    for i in range(1,14):
        url = 'https://qiushibaike.com/text/page/{}'.format(i)
        html = download_page(url)
        get_content(html,i)
        
if __name__ == '__main__':
    main()

总结:在本次学习中,同样遇到了一些问题,比如获取的内容为空报错,后来仔细检查才发现是代码写错了,以后需要更加细心,更加深入的学习。

上一篇下一篇

猜你喜欢

热点阅读