如果爬取一个小说网站以后,如何做到更新内容的爬取并且存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果爬取一个小说网站以后,如何做到更新内容的爬取并且存储相关的知识,希望对你有一定的参考价值。

比如爬取1000本小说,爬取完成以后,等到第二天,小说更新的新的章节,那么如何进行只对新章节的爬取

有一个标记库,记录的目标小说网站目标小说的最新文章id,一般url最后一段数字或者页面的html里面包含。

定时去读取这个最新文章页面,如果当前这个页面是最新的文章,没有更新,那么网页上的下一章那个连接是#(也就是页面本身),有的是跳转到本小说的章节目录,根据情况判断,如果小说更新了,下一章的按钮连接就变话了,根据下一章的id去读取,并更新数据库的标记

参考技术A 爬个目录存入数据库,下次爬再对比不就行了。
而且别每天了,每15分钟爬一次吧。。。本回答被提问者采纳

Python 爬取笔趣阁小说

  最近在学习 Python,觉得爬虫很好玩,今天我准备爬取我看了至少三遍的小说《雪中悍刀行》,作者是烽火戏诸侯,他的小说很有才华,有着很多的粉丝,但他很多部小说都处于断更状态,因此人称大内总管。

  我准备爬取小说的网站是新笔趣阁,这里一个盗版网站,是名门正派的眼中钉,不过对于我这种不想交钱看小说的人,没资格评论它,这个网站连载的小说更新的还是比较快的,内容都是和正版的内容一模一样。好了,废话不多说了,下面开始放代码:

  我在抓取小说内容时先用了 requests 库来抓取,结果就抓到了一章小说的开头几句话,后来想到了刚在学习的 Selenium 自动化测试工具,利用 Selenium 可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面源代码,可以做到爬取呈现在你面前的所有内容。

  首先我们先打开我们要爬取小说的主页 url = ‘https://www.xxbiquge.com/0_807/‘,此时我们可以看到页面是小说的全部章节,我们先要拿到小说章节总数,代码如下:

def page_num():
    """
    对小说的进行分析,得到小说总的章节数
    :return: 章节数
    """
    # 目标小说的 URL 地址,如果你想爬其他小说,只要改成你要爬的小说的主页就好了
    url = https://www.xxbiquge.com/0_807/
    browser = webdriver.Chrome()
    browser.get(url)
    html = browser.page_source
    soup = BeautifulSoup(html, lxml)
    dd = soup.find_all(name="dd")
    page = len(dd)
    browser.close()
    return page

  接下来我们要对单章小说进行分析,比如第一章,第一章的 url = ‘https://www.xxbiquge.com/0_807/4055527.html‘,我们很容易就能拿到第一章的源代码,关键是怎么得到下一章的内容,Selenium 可以模拟用户点击下一章,跳转到下一章的页面,技术分享图片代码如下:

def index_page(i):
    """
    加载出小说的每一章内容
    :param i: 小说的第 i 章
    """
    if i == 1:
        # 小说第一章的 Url 地址, 你要爬取的小说的第一章 url
        url = "https://www.xxbiquge.com/0_807/4055527.html"
        browser.get(url)
    # 等待 Content 节点加载出来
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, #content)))
    # 调用 get_info() 方法对页面进行解析
    get_info()
    # 寻找下一章点击的节点
    next_p = browser.find_elements(By.XPATH,(//div[@class="bottem2"]/a))[2]
    # 点击按钮
    next_p.click()

  第三步,提取每一章的内容,代码如下:

def get_info():
    """
    提取每一章小说的章章节名及正文
    :return:
    """
    # 找到章节的名字
    name = browser.find_element_by_css_selector(#wrapper > div.content_read > div > div.bookname > h1).text
    print(name)
    # 找到小说正文
    content = browser.find_element_by_id(content).text
    print(content)
    # 将拿到的小说名和对应的正文内容写入 txt 文件中
    with open(雪中悍刀行.txt,a,encoding="utf-8") as f:
        f.write(
.join([name, content]))
        f.write(

)

  第四步,遍历每一页:

def main():
    """
    b遍历小说的全部章节
    :return:
    """
    page = page_num()
    print(page)
    for i in range(1,page+1):
        index_page(i)

  最后一步,运行程序:

  

if __name__ == __main__:
    main()

然后就可以喝杯茶,等着小说下好。完整代码在:https://github.com/luoyunqa/Test/tree/master/biquge_novel

 

以上是关于如果爬取一个小说网站以后,如何做到更新内容的爬取并且存储的主要内容,如果未能解决你的问题,请参考以下文章

爬取并下载「旧时光文学」小说

网页爬虫小记:两种方式的爬取网站内容

爬虫 - 博客爬取并入库

CVPR论文爬取并进行词云展示

Python 爬取笔趣阁小说

Python爬虫 自动爬取图片并保存