教程:「Python」纯干货,5000字的博文教你采集整站小说(附源码)

优采云 发布时间: 2022-10-08 15:35

  教程:「Python」纯干货,5000字的博文教你采集整站小说(附源码)

  前言

  大家好,我叫山念,这是我的第二篇技术博文(第一篇是关于我自己的经历),已经连续三天更新了,每天花两个小时写一个实战案例。我也很享受。谢谢大家的支持。

  我们今天要做的就是用Python爬取整个网站上的所有小说内容,其实在我心里,采集的内容根本无所谓,最重要的是大家可以学我的分析思维,授人以鱼不如授人以渔。

  开始

  既然我们要采集整个站点数据,那么我们输入目标网站,点击所有作品。

  分析 (x0)

  第一步是右键查看网站源码看看有没有我们需要的书的源文件地址(当然要看源文件的地址,因为内容一本书这么大,一页书这么多,肯定不是源代码里的全部内容)。

  ​​​

  可以看到我可以在元素中找到书名和介绍,然后关键是一个跳转网址,这个网址很重要,因为我们点击这个链接后,他会跳转到单本小说。

  ​​​

  一部小说必然有章节分类,我们要做的就是采集每部小说的章节名称。

  最终目的是每部小说都是一个以书名命名的文件夹,然后所有章节都存放在文件夹中,每一章都是一个txt文件,没有章节名对应txt文件名。

  分析 (x1)

  逆向,切记不要把element看成源代码的问题!!元素可能是浏览器执行一些JavaScript后显示的源代码,与服务器传递给浏览器的源代码不同。

  所以我们还是要看看源码中是否有跳转链接和书名。

  ​​​

  好吧,源代码中也有。但也不能大意,一定要检查源代码中是否有,element不代表源代码。

  所以先采集看书名,第一页跳转链接

  ```

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?

学习Python中有不明白推荐加入交流Q群号:928946953

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

还有大牛解答!

```

# 抓取第一页的所有书籍名字,书籍入口

# 到了书籍入口后,抓取章节名字,章节链接(文字内容)

# 保存

import requests

from lxml import etree

import os

url='https://www.qidian.com/all'

req = requests.get(url).text

html = etree.HTML(req)

booknames = html.xpath('//div[@class="book-mid-info"]/h4/a/text()')

tzurls = html.xpath('//div[@class="book-mid-info"]/h4/a/@href')

for bookname, tzurl in zip(booknames, tzurls):

if not os.path.exists(bookname):

# if os.path.exists(bookname) == False:

os.mkdir(bookname) # 创建文件夹

  这符合我们的想法。每次 采集 到达书名时,我们都会为其创建一个单独的文件夹。

  ​​​

  完全没有问题,到这里我们已经完成了第一步。

  分析 (x2)

  然后下一步就是模拟我们采集要去的书目录的跳转链接,然后用同样的方法去采集的跳转链接到章节名和章节内容。

  ​​​

  同样可以自己查源码,数据也在里面。

  ​​​

  然后写代码

  ```

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?

学习Python中有不明白推荐加入交流Q群号:928946953

<p>

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

还有大牛解答!

```

import requests

from lxml import etree

import os

url = &#39;https://www.qidian.com/all&#39;

req = requests.get(url).text

html = etree.HTML(req)

booknames = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/text()&#39;)

tzurls = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/@href&#39;)

for bookname, tzurl in zip(booknames, tzurls):

if not os.path.exists(bookname):

# if os.path.exists(bookname) == False:

os.mkdir(bookname) # 创建文件夹

req2 = requests.get("http:" + tzurl).text

html1 = etree.HTML(req2)

zjurls = html1.xpath(&#39;//ul[@class="cf"]/li/a/@href&#39;)

zjnames = html1.xpath(&#39;//ul[@class="cf"]/li/a/text()&#39;)

for zjurl, zjname in zip(zjurls, zjnames):

print(zjname+&#39;\n&#39;+zjurl)</p>

  效果图:

  ​​​

  分析 (x3)

  你知道为什么我没有将带有章节名称的txt文件保存在文件夹中吗?

  因为我们还没有获取到章节的内容,是不是需要先把章节的内容写入章节的txt,然后保存到文件夹中呢?

  当然,这个解释是为了照顾新手。

  那么下一章的内容采集,方法就不说了,一模一样,上一章源码中也有这一章的内容。

  ​​​

  每个标签只保存一行内容,所以需要将采集中的所有内容合并起来,并用换行符分隔,尽量保持文章的格式。

  代码开始:

  ```

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?

学习Python中有不明白推荐加入交流Q群号:928946953

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

还有大牛解答!

```

import requests

from lxml import etree

import os

url = &#39;https://www.qidian.com/all&#39;

req = requests.get(url).text

html = etree.HTML(req)

booknames = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/text()&#39;)

tzurls = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/@href&#39;)

for bookname, tzurl in zip(booknames, tzurls):

if not os.path.exists(bookname):

# if os.path.exists(bookname) == False:

os.mkdir(bookname) # 创建文件夹

req2 = requests.get("http:" + tzurl).text

html1 = etree.HTML(req2)

zjurls = html1.xpath(&#39;//ul[@class="cf"]/li/a/@href&#39;)

zjnames = html1.xpath(&#39;//ul[@class="cf"]/li/a/text()&#39;)

for zjurl, zjname in zip(zjurls, zjnames):

print(zjname+&#39;\n&#39;+zjurl)

req3 = requests.get(&#39;http:&#39; + zjurl).text

html2 = etree.HTML(req3)

<p>

nrs = html2.xpath(&#39;//div[@class="read-content j_readContent"]/p/text()&#39;) # 分散式内容

nr = &#39;\n&#39;.join(nrs)

file_name = bookname + "\\" + zjname + ".txt"

print("正在抓取文章:" + file_name)

with open(file_name, &#39;a&#39;, encoding="utf-8") as f:

f.write(nr)</p>

  效果图:

  ​​​

  这里需要注意的是,我们只抓取了第一页的数据。那么如何抓取整个站点的数据呢?

  分析 (x4)

  一般稍微有经验的人都知道,当我们翻页的时候,网站的url会发生变化,通常页码在url上。

  ​​​

  ​​​

  只需要构建一个for循环将页数变成一个变量,不用多说,直接上最终完整代码,代码仅供参考,最终可以自己修改效果。

  完整代码

  ```

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?

学习Python中有不明白推荐加入交流Q群号:928946953

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

还有大牛解答!

```

import sys

import requests

from lxml import etree

import os

for i in range(sys.maxsize):

url = f&#39;https://www.qidian.com/all/page{i}/&#39;

req = requests.get(url).text

html = etree.HTML(req)

booknames = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/text()&#39;)

tzurls = html.xpath(&#39;//div[@class="book-mid-info"]/h4/a/@href&#39;)

for bookname, tzurl in zip(booknames, tzurls):

if not os.path.exists(bookname):

# if os.path.exists(bookname) == False:

os.mkdir(bookname) # 创建文件夹

req2 = requests.get("http:" + tzurl).text

html1 = etree.HTML(req2)

zjurls = html1.xpath(&#39;//ul[@class="cf"]/li/a/@href&#39;)

zjnames = html1.xpath(&#39;//ul[@class="cf"]/li/a/text()&#39;)

for zjurl, zjname in zip(zjurls, zjnames):

print(zjname+&#39;\n&#39;+zjurl)

req3 = requests.get(&#39;http:&#39; + zjurl).text

html2 = etree.HTML(req3)

nrs = html2.xpath(&#39;//div[@class="read-content j_readContent"]/p/text()&#39;) # 分散式内容

nr = &#39;\n&#39;.join(nrs)

file_name = bookname + "\\" + zjname + ".txt"

print("正在抓取文章:" + file_name)

with open(file_name, &#39;a&#39;, encoding="utf-8") as f:

f.write(nr)

  我有话要说

  ​​​

  ——女朋友是私有变量,只有我班可以调用(第二周纪念分手

  emmm之前本来是录视频教程的,但是离开之前的公司之后就丢失了。在这里向大家道歉。

  不过文章的话现在都写好了,每一个文章我都会讲得很仔细,所以python教程要花很长时间,一般要两个多小时,每个文章到约5000字。

  干货:织梦插件怎么用?织梦插件大全合集含文章补损值

  为什么使用 织梦 插件?如何使用 织梦 插件对 网站收录 和 关键词 进行排名。我们知道在网站seo优化的过程中,难免会有各种锚文本链接设置。通过设置锚文本,主要目的是将网站的内容有机地联系起来,这样形成一个整体,有助于用户快速查找和定位对应的内容,也有助于提高的能力网站 被百度等搜索引擎的蜘蛛机快速爬取,有助于提升 网站 的优化效果。

  一、锚文本链接的文字要多样化

  优化后的网站站点中的锚文本链接尽量与核心优化关键词相关的词链接,如:seo引入的页面,不可能只用seo作为core 关键词 for links 链接页面时,应使用“SEO技术”、“百度SEO”等关键词作为锚文本链接进来,避免网站 被搜索引擎过度优化。

  网站 更新得越频繁,搜索引擎蜘蛛就会越频繁地出现。因此,我们可以使用织梦插件实现采集伪原创自动发布和主动推送到搜索引擎,增加搜索引擎的爬取频率和网站收录 和 关键词 排名。

  1. 免费织梦采集插件

  免费织梦采集插件特点:

  1、只需将关键词导入到采集相关的关键词文章,同时创建几十个或几百个采集任务(一个任务可以支持上传1000个) 关键词),支持过滤关键词。

  2. 支持多消息源:问答和各种消息源(可同时设置多个采集消息源采集/采集消息源稍后添加)

  

  3.过滤其他促销信息

  4. 图片定位/图片水印/图片第三方存储

  5.文章互通+翻译(简体中文繁体翻译+百度翻译+有道翻译+谷歌翻译+147翻译)

  6.自动批量挂机采集,与各大cms发布者无缝对接,采集后自动发布——实现采集发布全自动挂机。

  2.跨平台发布插件

  全平台cms发布者的特点:

  1、cms发布:目前市面上唯一支持Empirecms、易友、ZBLOG、dedecms、WordPress、PBoot、Applecms、迅锐cms、PHPcms、Applecms、人人网cms、美图cms、云游cms、Cyclone站群、THINKCMF、建站ABC 、凡客cms、一骑cms、Oceancms、飞飞cms、Local Release、搜外等各大cms,以及一个工具可同时管理和批量发布

  2.全网推送(百度/360/搜狗/神马)

  3. 伪原创(标题+内容)

  4.更换图片,防止侵权

  5. 强大的SEO功能(自动图片放置/插入内外链接/标题和文章前后插入内容/标题关键词与内容一致关键词/随机插入图片/添加随机属性的页面原创degree)

  

  6.对应栏目:对应文章可以发布对应栏目/支持多栏目发布

  7、定时发布:可控发布间隔/每天发布总数

  8、监控数据:直接监控已经发布、待发布的软件,是否为伪原创、发布状态、网站、程序、发布时间等。

  3.锚文本链接的内容要与链接页面相关

  在网站内链布局的过程中,一定要有内容相关性。这个相关性是指锚文本链接到这个页面的相关性。例如,如果网站的锚文本链接是“SEO”,那么该页面的链接应该是对SEO的介绍。为什么要这样做,因为对于搜索引擎和用户来说,点击你的链接是为了了解这个词的详细描述。为此,我们可以参考百科系统的链接,打开每个链接来描述单词。

  4、网站内容导出链接数

  网站页面内容导出的链接数量经过分析观察(见百科内容导出的链接),数量不多,但对于内容较少的企业来说网站建议从页面导出的链接数最好控制在5个左右(500-800字左右),毕竟网站的内容还不足以建立强大的网络。

  5.记得故意添加链接到锚文本链接

  在编辑和优化 网站 的内容时,总是会考虑到 关键词 的密度。密度要控制在合适的范围内,网站关键词应该放在哪里等等,不要堆叠关键词。

  对于站点中的锚文本链接,我们认为不应该刻意添加锚文本;比如在文章的开头和结尾,我们特意加了很多关键词,文章在上面显示的位置中间关键词比较少或者没有,我们编辑内容,使用户不能纯粹为了优化而更新内容。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线