鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 0

[学习笔记] 爬取糗事百科的爬虫

[复制链接]
发表于 2020-5-25 01:09:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yjptx121 于 2020-6-3 21:42 编辑
import re
import requests
import time

number = 1
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
BASE_URL = 'https://www.qiushibaike.com'
full_url = []


def get_url(url='https://www.qiushibaike.com/hot/page/{}/'):         # 获取主页面
    urls = []
    print('获取主页面.....')
    for index in range(1, 9):                                        # 爬取1-9页的段子
        urls.append(url.format(index))
    print('主页面获取完成.....')
    return urls


def get_full_text(url):                                              # 传入主页面,然后获取主页面的子页面集合
    print("获取详细url.....")
    text = requests.get(url, headers=HEADERS).content.decode('utf-8')
    urls = re.findall(r'<div class= "content">. * ? <a href="(.*?)" .*?>', text, re.DOTALL)     # 获取所有符合条件的url
    for index in range(len(urls)):
        full_url.append(BASE_URL + urls[index])                                             # 组合后添加至列表中
    print('详细页面获取完成.....')
    return full_url


def parse_url(url):
    global number
    print('正在解析第{}个网页...'.format(number))
    response = requests.get(url, headers=HEADERS)
    text = response.text
    infos = re.findall(r'<div class="content">(.*?)</div>', text, re.DOTALL)        # 获取段子内容
    contents = []
    for info in infos:                                              # 遍历
        if 350 > len(info) > 50:                                    # 如果长度小于50或大于350,则判定为是图片或小说,忽略,反之则写入
            contents.append(re.sub('<. * ?>' , '', info).strip())      # 去掉空格并替换掉所有的标签
        else:
            print('此页面不符合要求!')
    print('准备写入.....')
    with open('糗事百科内容爬取.txt', 'a', encoding='utf-8') as fp:    # 写入创建好的文件
        for content in contents:
            fp.write('{}我是华丽的分割线,这是第{}条{}\n'.format("-"*50, number, "-"*50))
            fp.write('{}\n\n'.format(content))
            number += 1
    print('写入完成......')
    time.sleep(2)


if __name__ == '__main__':
    url_index = get_url()                            # 获取需要爬取的主页面列表集合
    for each_url in url_index:                       # 遍历,获取每一个主页面
        detail_urls = get_full_text(each_url)        # 获取每一个主页面下的详情页面集合
        for detail_url in detail_urls:               # 遍历,获取每一个段子对应的详情页面
            parse_url(detail_url)                    # 解析页面
    print('所有数据收集完毕!')
有做修改,勿怪!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 17:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表