介绍:爬取《牧神记》小说,牧神记这部小说是我近年读到比较优秀的小说,从小说第一章开始到现在一千多章,可以看到作者的文笔越来越成熟,可能是这种像看着主人公成长的感觉一直吸引着我,期待作者可以有更多优秀的作品呈现给大家。话不多说,赶紧开始:

首先我们对每篇小说进行分析,右键检查,发现文章的内容放在novelcontent内的 p节点中,这下问题就简单了,beautifulsoup解析页面获得data,获取标题data.title.string, 再回到网页,检查元素,找到novelcontent的父节点content_novel和novelbody,利用data.select获取内容,返回text格式,这样我们就轻松获得了文章的内容:

section_text = data.select('#novelbody .content_novel #novelcontent p')[0].text

清除text不需要的符号,规范格式:

section_text=re.sub( '\s+', '\r\n\t', section_text).strip('\r\n')

解决了文章获取的问题,剩下来的问题就简单了,思路就是解析目录,获得当前目录页中每一章的地址,爬取这个地址的内容,直到爬取完当前目录页后,再获取目录页下一页的地址,直到爬取完成。

代码主要分为三部分:
第一部分:爬取文章内容
方法:

  • 利用beautifulsoup解析网页内容
  • 将text写入txt文件
  • 将文件命名为章节名字,并保存

第二部分:获取下一页地址
方法:

  • pyquery解析网页
  • 获取标签为"下一页"指向的next_url
  • 下一页url = http://m.biquyun + next_url

第三部分:获取目录页的所有文章的url
方法:

  • pyquery解析网页
  • 获取标签包含“第”指向的url (小说一般叫第XX章 XXX)
  • 获取每一页url

* coding:utf-8 *

import time
from pyquery import PyQuery as pq
import re
from bs4 import BeautifulSoup
import requests

headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Cookie': 'UM_distinctid=162f5f44f0113-0313b684ffd29e-5e4c2719-100200-162f5f44f05116; __jsluid=d26199ff490223142ead3dca3b417f0d; PHPSESSID=rcqhhvqkvd9ggs9mqarotu54n7; CNZZDATA1272873895=1502087634-1524539933-null%7C1524545333',
'Host': 'm.biquge.tw',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App leWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53'
           }
url = "http://m.biquyun/6_6595_1_1//"

def get_book(url):  #获取内容
    file=requests.get(url,params=headers)
    data=BeautifulSoup(file.text,"html.parser")
    bookname = data.title.string
    section_text = data.select('#novelbody .content_novel #novelcontent p')[0].text
    section_text=re.sub( '\s+', '\r\n\t', section_text).strip('\r\n')
    fo = open(bookname+'.txt', "ab+")         #打开小说文件
    fo.write(('\r' + bookname + '\r\n').encode('UTF-8'))
    fo.write((section_text).encode('UTF-8'))
    fo.close()        #关闭小说文件


def change_page(url):
    data = pq(url)
    nextpage = data('a:contains(下一页)')
    return (nextpage.attr('href'))

def get_page(url):
    data = pq(url)
    li = data('a:contains(第)')
    for a in li.items():
        get_book('http://m.biquyun'+a.attr('href'))
        print(a.text())
        # time.sleep(2)


if __name__ == '__main__':
    while(True):				#循环,直到结束
        get_page(url)
        url = "http://m.biquyun"+change_page(url)
        print(time.clock())

更多推荐

爬取牧神记小说