首页 > 编程语言 >全栈的自我修养 ———— python爬虫爬取斗破苍穹小说并保存到文档里!看完保证会灵活使用爬虫!!

全栈的自我修养 ———— python爬虫爬取斗破苍穹小说并保存到文档里!看完保证会灵活使用爬虫!!

时间:2024-03-17 13:59:11浏览次数:30  
标签:soup python 爬虫 BeautifulSoup 取斗破 url response message requests

如果赶时间请直接看第四大步中的源码,好好看完这篇博客,这里保证大家以后彻底搞懂获得一个网站怎么来爬取!!!!

一、准备

1、安装好BeautifulSoup

二、选入合适的爬取的目标

1、如何看出网站做了反爬

小编第一次搜索搜索到了该网站斗破苍穹

如下,返回的html原文档一串密文,当然你也可以选择试着解析密文!
# 引入requests模块
import requests

# 引入BeautifulSoup资源库
from bs4 import BeautifulSoup

#获得所有链接
def getAllUrl():
    url = "https://www.beqege.cc/16747/"
    response = requests.get(url)
    # 返回html的原文档
    soup = BeautifulSoup(response.content, "html.parser") 
    print(soup)
# 定义方法
getAllUrl()

在这里插入图片描述

2、合适的网站

小编又向下找找到了这个网站斗破苍穹,这个网站用BeautifulSoup测试后发现能返回正常的html,那他就是适合的网站。
在这里插入图片描述

三、理思路

1、选择合适的页面

如下,当前这个含有每一章链接的页面就是一个很好的切入网站!!

在这里插入图片描述

2、选择合适的元素

咱们查看原html文档发现每一个<a>链接都是由一个<ul>元素包裹
其中这个ul元素的类名是line3
所以咱们可以先获取到所有的line3然后再获取内部的<a>元素

三、爬取

1、获取所有章节的链接

获取网站上链接

# 引入requests模块
import requests

# 引入BeautifulSoup资源库
from bs4 import BeautifulSoup


# 获得所有链接,返回一个数组
def getAllUrl():
    url = "https://dp.kelehut.cc/xiaoshuo/109/"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    hrefArr = []
    
    # 寻找soup原html文档所有类名是line3的元素
    # 然后再把每一个line3中的<a>便利出来,负值给href
    # 再将每一个href插入到hrefArr里面
    # 最后返回一个url数组
    for i in soup.find_all(class_="line3"):
        for params in i.find_all("a"):
            href = params.get("href")
            hrefArr.append(href)
    return hrefArr
# 定义方法

print(getAllUrl())

在这里插入图片描述

补全链接

我们可以看到第一步获取到的所有的链接都是被省略了域名
所以这里需要我们手动把每一个链接给补全
后来补全的网站可以尝试直接访问了!!!!

在这里插入图片描述

# 引入requests模块
import requests

# 引入BeautifulSoup资源库
from bs4 import BeautifulSoup

#获得所有链接
def getAllUrl():
    url = "https://dp.kelehut.cc/xiaoshuo/109/"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    hrefArr = []
    for i in soup.find_all(class_="line3"):
        for params in i.find_all("a"):
            href = "https://dp.kelehut.cc/" + params.get("href")
            hrefArr.append(href)
    return hrefArr
# 定义方法
print(getAllUrl())


在这里插入图片描述

2、获取每一个链接章节的标题和内容

1、获取单个章节内容

在这里插入图片描述

如图通过过第一章我们发现我们需要获取:
*文章标题<h1>元素
*还有所有的<p>

然后将组成一个{ "title": title,"message": message }的对象

最后getText将会是一个传入一个链接
然后返回这个链接章节里面所有内容(text)的方法

由于一次传输的内容过大这里咱们就单个测试一下
# 引入requests模块
import requests

# 引入BeautifulSoup资源库
from bs4 import BeautifulSoup

#获得所有链接
def getAllUrl():
    url = "https://dp.kelehut.cc/xiaoshuo/109/"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    hrefArr = []
    for i in soup.find_all(class_="line3"):
        for params in i.find_all("a"):
            href = "https://dp.kelehut.cc/" + params.get("href")
            hrefArr.append(href)
    return hrefArr
# 定义获取章节内容方法
def getText(url):

    response = requests.get(url)

    soup = BeautifulSoup(response.content, "html.parser")

	# 获取<h1>中的title
    title = soup.find("h1").getText()
    message = ""
	# 获取所有的<p>元素
    body = soup.find_all("p")
    # 去掉第一个对象(因为第一个是额外内容)
    body = body[1:]

    for i in body:
    	# 获取每一个<p>的内容并添加换行
        message = message + i.getText() + "\n"
    # 组成数组插入到text数组里面!
    text = ({"title": title, "message": message})

    return text

res = getAllUrl()
messageArr = []
messageArr.append(getText(res[0]))
print(messageArr)

在这里插入图片描述

2、获取所有的内容

由于链接一次性获取太大,咱们就试一下6-10的链接章节内容
(小编发现第六个链接才是第一章,有可能是原html文档的问题)
好现在咱们获取了一个所有章节对象的内容的数组
import requests
from bs4 import BeautifulSoup

#获得所有链接
def getAllUrl():
    url = "https://dp.kelehut.cc/xiaoshuo/109/"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    hrefArr = []
    for i in soup.find_all(class_="line3"):
        for params in i.find_all("a"):
            href = "https://dp.kelehut.cc/" + params.get("href")
            hrefArr.append(href)
    return hrefArr
# 定义方法
def getText(url):
    response = requests.get(url)

    soup = BeautifulSoup(response.content, "html.parser")


    title = soup.find("h1").getText()
    message = ""

    body = soup.find_all("p")
    # 去掉第一个对象(因为这段话没用)
    body = body[1:]

    for i in body:
        message = message + i.getText() + "\n"
    text = ({"title": title, "message": message})

    return text
# 添加到文件
def addFile(arr):
    file_path = "斗破苍穹.txt"
    with open(file_path, "a") as file:
        for item in arr:
            file.write(item["title"] + "\n" + item["message"])
            
res = getAllUrl()
messageArr = []
for i in range(6, 10):
    messageArr.append(getText(res[i]))

addFile(messageArr)
print(messageArr)

在这里插入图片描述

3、添加到文本中

def addFile(arr):
    file_path = "斗破苍穹.txt"
    with open(file_path, "a") as file:
        for item in arr:
            file.write(item["title"] + "\n" + item["message"])
            
res = getAllUrl()
messageArr = []
for i in range(6, 10):
    messageArr.append(getText(res[i]))

addFile(messageArr)

在这里插入图片描述

四、源码

# 引入requests模块
import requests

# 引入BeautifulSoup资源库
from bs4 import BeautifulSoup

#获得所有链接
def getAllUrl():
    url = "https://dp.kelehut.cc/xiaoshuo/109/"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    hrefArr = []
    for i in soup.find_all(class_="line3"):
        for params in i.find_all("a"):
            href = "https://dp.kelehut.cc/" + params.get("href")
            hrefArr.append(href)
    return hrefArr
# 定义方法
def getText(url):
    
    response = requests.get(url)

    soup = BeautifulSoup(response.content, "html.parser")
    
    title = soup.find("h1").getText()
    message = ""

    body = soup.find_all("p")
    # 去掉第一个对象
    body = body[1:]

    for i in body:
        message = message + i.getText() + "\n"
    text = ({"title": title, "message": message})

    return text

def addFile(arr):
    file_path = "斗破苍穹.txt"
    with open(file_path, "a") as file:
        for item in arr:
            file.write(item["title"] + "\n" + item["message"])
            
            
res = getAllUrl()
messageArr = []
for i in range(6, 10):
    messageArr.append(getText(res[i]))

addFile(messageArr)


标签:soup,python,爬虫,BeautifulSoup,取斗破,url,response,message,requests
From: https://blog.csdn.net/2401_82752568/article/details/136697263

相关文章

  • Dynamo PythonScript 代码速查手册By九哥
    你好,这里是BIM的乐趣,我是九哥今天给大家带来的是我的知识工程的第二套知识库,这套知识库不是教程,是一套完整的笔记,里面包含了大量的Python代码。当然这里也没有实现太多的具体逻辑,单纯的是通过Python在Dynamo中实现一些RevitAPI的方法,我的目的就是省事,写代码的时......
  • AI回答记录:python中有重载与重写的概念吗?
    问:python中有重载与重写的概念吗?GPT4-turbo:在Python中,严格来说没有像其他一些编程语言(如Java、C++)那样的重载(Overloading)机制,但是可以通过其他方式实现类似的功能。Python中有重写(Overriding)的概念。重载(Overloading):Python不支持传统的方法重载,即在同一个类中定义多个同名......
  • Python实战:爬取小红书
    有读者在公众号后台询问爬取小红书,今天他来了。本文可以根据关键词,在小红书搜索相关笔记,并保存为excel表格。爬取的字段包括笔记标题、作者、笔记链接、作者主页地址、作者头像、点赞量。一、先看效果1、爬取搜索页2、爬取结果保存到本地excel表格运行我写的爬虫,......
  • Python中有重写和重载的方法吗?
    问1:Python中有重写和重载的方法吗?先说结论:Python因为语言的特性,没有重载,但是有重写的方法。问2:什么是重写?1.先看代码:classCalculator:defadd(self,a,b):print("我执行了吗?")returna+b+100defadd(self,a,b):returnflo......
  • python自动化——Requests——教程截图笔记复习
                                                                           123123......
  • Python基本语法
    Python基本语法Python是一种简单易学、功能强大的编程语言,其基本语法涵盖了变量、数据类型、运算符等方面。本文将介绍Python中的基本语法要点,帮助初学者快速入门。变量在Python中,变量是用来存储数据的容器。定义变量时不需要指定数据类型,Python会根据赋给变量的值自动确......
  • Python中的模块管理:提高代码效率和可维护性
    在编程中,随着项目的增长,维护和管理代码变得越来越复杂。Python通过模块化来解决这个问题,使得代码更加有序,易于理解和维护。本文将探讨Python中模块的概念,如何用自定义模块管理函数,以及处理命名冲突的方法。模块的概念模块是Python程序结构的基本组成部分,它帮助我们将代码分割......
  • python疑难杂症(9)---python的数据类型字典(dict)的创建、访问、修改、删除等方法汇总
    在Python中,字典(Dictionary)是一种内置的数据烈性,是无序的数据结构,用于存储键值对(key-value)。字典中的每个元素由一个键(key)和一个对应的值(value)组成,键和值之间使用冒号(:)进行分隔,每个键值对之间使用逗号(,)进行分隔。字典中的键必须是唯一的,而值可以是任意类型的对象,字典可以用来存......
  • 基于Django旅游景区景点订票系统设计与实现(Pycharm+Python+Mysql)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • macos selenium msedgedriver 浏览器驱动 爬虫
    MacOSSelenium跨浏览器环境搭建在macOS上使用Selenium启动新版Edge的方式如下。macOS版本:10.15.5Edge版本:83.0.478.58下载83版本对应的新版Edge驱动:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads解压并移动到/usr/loca......