Python爬虫-网络小说

初识Python,本章主要做一下学习记录,如有错误,欢迎斧正,欢迎大神拍砖

爬虫步骤:

  • 确定爬取目标
  • 分析页面
  • 抓取页面内容,解析目标字段
  • 保存目标
1. 确定爬取目标

如题,今天需要爬取全书网,也就是这个页面

2. 分析页面

反向推理一下,需要获取到具体内容,需要拿到正文页面url
而需要获取到正文页面的url,则需要先拿到章节列表的url
而章节列表的url,前提有是当前书籍的首页
总结一下
小说网书库-->书籍首页-->章节列表-->章节内容-->下载保存

  • 书籍首页
    分析首页,我们需要的就是href里的书籍首页链接
    这里使用正则匹配

  • 法家高徒href="http://www.quanshuwang.com/book_137459.html" class="clearfix stitle">法家高徒作者:竖子不可教 百家争鸣,鬼神显圣,武道昌盛的大争之世。记忆达人司徒刑...更多马上阅读
  • .*?表示替换,(.*?)表示获取内容,下面这个正则,表示获取所以的

  • 标签里面的href的内容

    regex = r'

  • .*?.*?.*?.*?.*?.*?.*?
  • '

    # 爬取书籍首页
    def getEveryBookHomeURL(pages):
    
        print('正在解析单个图书首页...')
        book_homes =[]
        for page in pages:
            page_response = requests.get(page)
            page_response.encoding = 'gbk'
            if page_response.status_code == 200:
                # print(page_response.text)
                
                regex = r'
  • .*?.*?.*?.*?.*?.*?.*?
  • ' urls = re.findall(regex, page_response.text) for url in urls: book_homes.append(url)
    爬取单本书籍
    • 章节列表
      依然通过正则匹配,获取到每一章节的链接
    # 爬取书籍阅读页面(带章节列表)
    def getEveryBookReaderURL(homes):
    
        print('正在解析图书章节列表...')
    
        pages =[]
        for book_home in homes:
    
            book_response = requests.get(book_home)
            book_response.encoding = 'gbk'
            if book_response.status_code == 200:
                # 开始阅读
                regex = r'.*?'
                urls = re.findall(regex, book_response.text)
                if len(urls) > 0:
                    pages.append(urls[0])
    
    # 解析书籍章节列表
    def getBookContent(book_home_url):
        '''
        book_home_response = urllib.request.urlopen(book_home_url)
        if book_home_response.status == 200:
            print(book_home_response.read().decode('gbk'))
        :return:
        '''
    
        print('正在爬取书籍章节...')
        # 网络请求
        book_home_response = requests.get(book_home_url)
        # 中文编码
        book_home_response.encoding = 'gbk'
        # 判断是否请求成功
        if book_home_response.status_code == 200:
            # 开始解析
            '''
            准备正则表达式
            1: 需要解析的内容结构  
  • 第一章 离乡
  • 2: 需要的内容用通配符 (.*? 匹配所有);用(.*?)括号扩起来的,才是会解析出来的 3:
  • (.*?)
  • ''' regex = r'
  • (.*?)
  • ' # 解析的数据,放到list里面 urls_titles = re.findall(regex,book_home_response.text) book_titles = re.findall(r'(.*?)',book_home_response.text) book_title = book_titles[0]
    爬取单本书籍章节列表

    爬取单张链接
    • 章节内容
    # 下载章节
    def downloadChapter(url, chaper_title, book_title):
    
        # 网络请求
        chaper_response = requests.get(url)
        # 中文编码
        chaper_response.encoding = 'gbk'
        # 判断是否请求成功
        if chaper_response.status_code == 200:
            # 开始解析
            regex = r'    (.*?)
                        
                        

    你可能感兴趣的:(Python爬虫-网络小说)