yjptx121 发表于 2020-5-25 01:09:26

爬取糗事百科的爬虫

本帖最后由 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)                                             # 组合后添加至列表中
    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('所有数据收集完毕!')

有做修改,勿怪!
页: [1]
查看完整版本: 爬取糗事百科的爬虫