利用python爬取小说(转载)

				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/xjm850552586/article/details/78585286				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">
            <p><span style="color:#3f3f3f;"><strong>运行平台:</strong></span><span style="color:#3f3f3f;"><strong>&nbsp;<a href="https://www.baidu.com/s?wd=Windows&amp;tn=24004469_oem_dg&amp;rsv_dl=gh_pl_sl_csd" target="_blank">Windows</a>&nbsp;</strong></span></p>

Python版本: Python3.x 

 

一、库文件                                       

re 
sys
BeautifulSoup
urllib.request
time

二、实战                                           

(1)背景介绍

从乐文小说网站上爬取小说相见欢,并存放至txt文件中

URL: 相见欢

 

(2)Beautifu  Soup库的简介

 

  简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

  • Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

  • Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

  • Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

详细请戳这里:Beautiful Soup 4.2.0文档

 

 

(3)实战进行中……

【重要】:python想要使用汉字,需要在脚本最前面添加 #coding:utf-8,汉字使用的编码为utf-8,否则会出现错误)

首先,我们引入我们需要的库文件

 


 
 
  1. #coding:utf-8
  2. import re
  3. import sys
  4. from bs4 import BeautifulSoup
  5. import urllib.request
  6. import time

 

 

接下来,我们进行爬虫伪装(伪装报头)

(本次教程的网站没有反爬虫机制,可以选择跳过)

 


 
 
  1. headers = ( 'User-Agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1')
  2. opener = urllib.request.build_opener()
  3. opener.addheaders = {headers}
  4. urllib.request.install_opener(opener)

 

 

我们从爬取单章开始,首先我们进入第一张的网址相见欢-第一章

 


 
 
  1. url = "http://www.lewendu8.com/books/21/21335/6381842.html"
  2. file = urllib.request.urlopen(url)
  3. data = BeautifulSoup(file , from_encoding= "utf8")

 

 

 

 

data = BeautifulSoup(file , from_encoding="utf8")
 
 

 

 

 

from_encoding="utf8"

我们需要将内容进行转码,否则中文将会以乱码形式出现

 

 

我们首先获取这章的名称

 


 
 
  1. section_name = data.title.string
  2. print(section_name)

 

    运行结果:

   

 

 

 

 

section_name = data.title.string

 

我们利用这句话获取文章的章名(我认为比较简便的一种方法)

 

接下来我们需要获取这章的内容!!(不然看什么小说呢?)

我们按F12进入开发者功能,找出存放内容的标签

 

 

按照父子顺序细细划分

 

于是,我们寻找到了存放内容的标签

用下述语句将内容存放至section_text中

 

section_text = data.select('#bgdiv .border_l_r #content p')[0].text

 

 

 

按照指定格式替换章节内容,运用正则表达式

 

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

 

 

 

运行结果

 

至此,我们单章爬取任务完成

 

接下来我们任务当然是获取整本小说的内容了!

 

 

首先我们来比较一下每一章的网址

 

 

第一章:http://www.lewendu8.com/books/21/21335/6381842.html

第二章:http://www.lewendu8.com/books/21/21335/6381843.html

……

 

因此URL的构成:http://www.lewendu8.com/books/21/21335/章节序号.html

我们观察网页源代码可以发现:

其中next_page = "6381843.html"便是下一章的章节序号

因此我们在每个网页访问结束时,便可以进行访问下一章的网址

这里我们使用正则匹配获取下一章的章节序号

 

pt_nexturl = 'var next_page = "(.*?)"'

nexturl_num = re.compile(pt_nexturl).findall(str(data))

nexturl_num = nexturl_num[0]

 

当我们访问到相见欢最后一章时

 

当访问到最后一章时,我们的小说已经全部爬取结束

此时正则匹配到的信息为:"http://www.lewendu8.com/books/21/21335/"

于是我们可以通过这个判断我们是否爬取结束

 


 
 
  1. if(nexturl == 'http://www.lewendu8.com/books/21/21335/'):
  2. break

 

 

当我们爬取到了内容当然要进行文件读写进行存放

 

fp = open('相见欢.txt','a')

section_text = section_text

fp.write(section_name+"\n")

fp.write(section_text+"\n")

 

 

至此,本次爬取结束~您就可以将txt文件存放到手机上,看小说喽~

 

三、完整代码                                                                         

 


 
 
  1. #coding:utf-8
  2. #author:Ericam_
  3. import re
  4. import sys
  5. from bs4 import BeautifulSoup
  6. import urllib.request
  7. import time
  8. headers = ( 'User-Agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1')
  9. opener = urllib.request.build_opener()
  10. opener.addheaders = {headers}
  11. urllib.request.install_opener(opener)
  12. def get_download(url):
  13. file = urllib.request.urlopen(url)
  14. data = BeautifulSoup(file , from_encoding= "utf8")
  15. section_name = data.title.string
  16. section_text = data.select( '#bgdiv .border_l_r #content p')[ 0].text
  17. section_text=re.sub( '\s+', '\r\n\t', section_text).strip( '\r\n')
  18. fp = open( '2.txt', 'a')
  19. fp.write(section_name+ "\n")
  20. fp.write(section_text+ "\n")
  21. fp.close()
  22. pt_nexturl = 'var next_page = "(.*?)"'
  23. nexturl_num = re.compile(pt_nexturl).findall(str(data))
  24. nexturl_num = nexturl_num[ 0]
  25. return nexturl_num
  26. if __name__ == '__main__':
  27. url = "http://www.lewendu8.com/books/21/21335/6381842.html"
  28. num = 228
  29. index = 1
  30. get_download(url)
  31. while( True):
  32. nexturl = get_download(url)
  33. index += 1
  34. sys.stdout.write( "已下载:%.3f%%" % float(index/num* 100) + '\n')
  35. sys.stdout.flush()
  36. url = "http://www.lewendu8.com/books/21/21335/"+nexturl
  37. if(nexturl == 'http://www.lewendu8.com/books/21/21335/'):
  38. break
  39. print(time.clock())

 

 

 

 

 

 

 

 

### 使用Selenium爬取CSDN博客文章并提取数据 为了完成对CSDN博客文章的自动化抓取任务,可以采用Selenium这一强大的工具来模拟浏览器行为。以下是基于引用内容总结的操作方法和步骤: #### 1. 安装必要的依赖项 在开始之前,需安装所需的Python库以支持Selenium的功能。这通常包括`selenium`库本身以及其他可能需要用到的辅助库,比如用于解析HTML文档的`BeautifulSoup`[^1]。 ```bash pip install selenium beautifulsoup4 ``` #### 2. 配置 WebDriver Selenium需要通过WebDriver接口控制特定的浏览器实例。对于主流浏览器(如Chrome或Firefox),下载对应的驱动程序是必不可少的第一步。例如,在使用Google Chrome的情况下,应先下载[Chromedriver](https://sites.google.com/a/chromium.org/chromedriver/)并与脚本放置在同一目录下或者配置环境变量使其可被识别。 ```python from selenium import webdriver driver = webdriver.Chrome(executable_path='path/to/chromedriver') ``` #### 3. 访问目标网页 利用已初始化好的webdriver对象访问指定URL地址即要爬取的目标CSDN博文链接。这里假设我们要处理的是ID为'4473401'的具体某篇帖子,则可以通过拼接标准格式化字符串构建完整的请求路径: ```python url = f"https://blog.csdn.net/username/article/details/{article_id}" driver.get(url) ``` #### 4. 提取所需的数据字段 一旦加载好页面之后就可以运用XPath表达式或者其他定位策略选取感兴趣的内容片段了。考虑到实际应用中的复杂性和多样性,下面给出了一种通用的方式用来获取标题、正文以及评论区的主要部分[^1][^2]: ```python from bs4 import BeautifulSoup # 获取整个DOM树结构 html_source = driver.page_source soup = BeautifulSoup(html_source, 'lxml') title = soup.find('h1', class_='title-article').text.strip() content_div = soup.find(id="content_views").get_text(separator="\n", strip=True) comments_section = [] for comment in soup.select('.comment-content'): comments_section.append(comment.text.strip()) ``` #### 5. 数据存储与后续处理 最后一步就是决定如何保存收集来的资料以便进一步分析研究。可以选择将其写入本地文件系统或者是上传至云端数据库等等多种方式实现持久化的记录保留. --- ### 复制他人CSDN文章到个人博客流程概述 如果只是单纯想搬运他人的作品而非真正意义上做网络爬虫开发的话,那么按照如下简单几步也可以轻松达成目的: 1. **打开目标文章**: 找到想要转载的文章页面。 2. **启用开发者模式**: 按快捷键 `F12`, 进而激活浏览器内置调试面板。 3. **查找关键区域标记`: Ctrl + F 输入 "article_content"` 来快速定位主体阅读区块位置. 4. **拷贝元素节点**: 对准匹配上的div容器右击菜单选项 -> Copy -> Copy Element . 5. **另存为 HTML 文件**: 创建一个新的纯文本档并将刚才剪贴板里的东西粘进去再改扩展名为.html形式 ,双击运行就能看到效果啦 ! 6. **转换成 MarkDown 格式**: 推荐借助第三方应用程序像 Typora 把 html 转 markdown 后再次编辑调整样式布局直至满意为止后再提交发表上去即可[^5]. 注意:务必遵循版权规定声明出处! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值