用requests包爬虫爬取小说---python

依赖包

import requests
import re
from retry import retry

过程

首先需要一个可用小说网络
例:在http://www.xbiquge.la/0/10/ 上爬取名为 武炼巅峰的小说
在这里插入图片描述
右键查看网页源码
在这里插入图片描述
设置编码格式并获取小说名字

url = 'http://www.xbiquge.la/0/10/'
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
print(html)
title = re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>', html)[0]

本地创建txt用于保存小说

fb = open('%s.txt' % title, 'w', encoding='utf-8')

在这里插入图片描述

获取小说章节列表,查看源码发现小说章节号放在list下,关键字在<a******>中,获取关键字不同小说网站的关键字有所不同,请对应修改

dl = re.findall(r'<div id="list">.*?</div>', html, re.S)[0]
chapter_info_list = re.findall(r"<a href='(.*?)' >(.*?)</a>", dl)

部分网络为出现请求超时,如超时,则反复请求有可能被网站封IP

@retry()
def make_trouble(url):
    '''Retry until succeed'''
    out = requests.get(url, timeout=10000)
    if out.status_code == 200:
        return out
    else:
        print('retrying...')
        raise

在**chapter_info_list **中依次请求网页进行章节内容爬取

for i in range(len(chapter_info_list)):
    chapter_url, chapter_title = chapter_info_list[i]
    chapter_url = "http://www.xbiquge.la%s " % chapter_url
    chapter_url = chapter_url.replace(' ', '')
    chapter_response = make_trouble(chapter_url)
    # chapter_response = requests.get(chapter_url, timeout=10000)
    chapter_response.encoding = 'utf-8'
    chapter_html = chapter_response.text
    chapter_content = re.findall(r'<div id="content">(.*?)</div>', chapter_html, re.S)
    if len(chapter_content) > 0:
        chapter_content = chapter_content[0]
        chapter_content = chapter_content.replace('&nbsp;', '')
        chapter_content = chapter_content.replace('<br />', '')
        chapter_content = chapter_content.replace('&amp;t;', '')
        fb.write(chapter_title)
        fb.write('\n')
        fb.write(chapter_content)
        fb.write('\n')
        print(chapter_url, chapter_title)
    else:
        fb.write(chapter_title + '缺失')
        fb.write('\n')

GAME OVER

赞!正在爬取中,等待结束。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值