21.21. 爬取糗事百科内容

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/7/10 20:49
# filename: 02.爬取糗事百科内容.py

import requests
import re
import time

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:67.0) Gecko/20100101 Firefox/67.0"
}
info_lists = []  # 初始化列表,用于装入爬虫信息


def judgment(class_name):
    if class_name == "womenIcon":
        return "女"
    else:
        return "男"


def get_info(url):
    res = requests.get(url, headers=headers)
    ids = re.findall("<h2>(.*?)</h2>", res.text, re.S)
    levels = re.findall('<div class="articleGender \D+Icon">(.*?)</div>', res.text, re.S)
    sexs = re.findall('<div class="articleGender (.*?)">', res.text, re.S)
    contents = re.findall('<div class="content">.*?<span>(.*?)</span>', res.text, re.S)
    laughs = re.findall('<span class="stats-vote"><i class="number">(\d+)</i> 好笑</span>', res.text, re.S)
    comments = re.findall('<i class="number">(\d+)</i> 评论', res.text, re.S)
    for id, level, sex, content, laugh, comment in zip(ids, levels, sexs, contents, laughs, comments):
        info = {
            "id": id,
            "level": level,
            "sex": judgment(sex),  # 调用judgment_sex()函数
            "content": content,
            "laugh": laugh,
            "comment": comments[0]
        }
        info_lists.append(info)  # 获取数据,加入到列表中


if __name__ == '__main__':
    urls = ["https://www.qiushibaike.com/text/page/{}".format(str(i)) for i in range(2, 10)]
    for url in urls:
        get_info(url)
        time.sleep(0.5)
for info_list in info_lists:  # 遍历列表,创建 TXT文件
    f = open("糗事百科.txt", "a+")
    try:
        f.write('用户名:' + info_list['id'] + '\n')
        f.write('等级:' + info_list['level'] + '\n')
        f.write('性别:' + '\n' + info_list['sex'] + '\n')
        f.write("段子内容:" + info_list['content'] + '\n')
        f.write("好笑指数:" + info_list['laugh'] + '\n')
        f.write("评论数:" + info_list['comment'] + '\n\n')
        f.close()
    except UnicodeEncodeError:
        pass
../../_images/qiushibaike-re00001.png