Python+Selenium爬取小说 ---- 新手入门必看

发布于:2022-12-03 ⋅ 阅读:(453) ⋅ 点赞:(0)

前言

本文针对Python+Selenium爬取小说,帮助初学者理解其中逻辑与细节问题;同时,也是对自己学习的记录。


一、如何构建Python程序书写逻辑

请观察如下流程图,是否有些许灵感?

 1. 起始页为小说章节列表,循环获取每一章节内容知识点:

  • 进入网页:get(url)
  • 定位元素:find_element(章节名、正文)、find_elements(每章节链接组成的多元素列表)
  • 写入文件:with open("filename", "a")    #  注意必须a追加写,w会覆盖

2. 判断返回列表目录之后,是否存在“下一页”提交框

  • 定位方法:find_elements ----------------当列表为空时,程序不会报错

二、使用步骤

1.引入库

from selenium import webdriver
from selenium.webdriver.common.by import By

2.代码开发

class Spider:
    page_num = 0

    def __init__(self):
        self.driver = webdriver.Chrome()

    def chapter_downloader(self, url):
        """
        下载每一章节内容
        Args:
            url: 每章小说的网址

        Returns:None

        """
        self.driver.get(url)
        ctitle = self.driver.find_element(By.CLASS_NAME, 'title').text
        content = self.driver.find_element(By.CLASS_NAME, 'text').text
        with open(f'e:/{self.novel_name}.txt', 'a') as c:
            c.write(ctitle + '\n' + content)

    def novel_downloader(self, link):
        """
        下载小说
        Args:
            link: 小说的目录页

        Returns:None

        """
        self.driver.get(link)
        self.novel_name = self.driver.find_element(By.TAG_NAME, 'h3').text
        chapters = self.driver.find_elements(By.PARTIAL_LINK_TEXT, '章')
        links = self.driver.find_elements(By.LINK_TEXT, '下一页')
        if links:
            next_page_url = links[0].get_attribute('href')
        else:
            next_page_url = ''

        Spider.page_num += 1
        print(f"开始下载第{Spider.page_num}页")
        urls = [chapter.get_attribute('href') for chapter in chapters]

        for url in urls:
            self.chapter_downloader(url)

        if next_page_url:
            self.novel_downloader(next_page_url)

2.传入实参

novel = Spider()
novel.novel_downloader("http://mosaic/mosaic/mosaic/mulu1.htm")

  具体测试网站不便展示,请自行拓展


总结

以上就是今天要讲的内容,本文仅仅使用创建类的办法爬取小说

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到