关键句采集 原创(利用Python爬取整个网站上的所有小说内容分析(x4)分析 )

优采云 发布时间: 2021-11-12 21:23

  关键句采集 原创(利用Python爬取整个网站上的所有小说内容分析(x4)分析

)

  内容

  前言

  开始

  分析 (x0)

  分析 (x1)

  分析 (x2)

  分析 (x3)

  分析 (x4)

  完整代码

  我有话要说

  前言

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

  今天我们要做的就是用Python爬取网站上的所有小说内容。其实在我心里,什么内容采集并不重要,最重要的是大家可以借鉴我的分析。思路,教人钓鱼不如教人钓鱼。

  开始

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

  

  分析 (x0)

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

  

  ​

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

  

  ​

  单本小说肯定会有章节分类,我们要做的就是还要采集每部小说的章节名称。

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

  分析 (x1)

  反过来,切记不要把element的问题作为源代码考虑!!元素可能是浏览器执行一些JavaScript后显示的源代码,不同于服务器发送给浏览器的源代码。

  所以我们还是需要去查一下源码中是否有跳转链接和书名。

  

  ​

  嗯,源代码中也有。但是你不能大意,你必须检查源代码中是否有,元素不代表源代码。

  然后先采集点击标题跳转第一页链接

  ```

当然在学习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

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和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) # 创建文件夹

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

html1 = etree.HTML(req2)

zjurls = html1.xpath('//ul[@class="cf"]/li/a/@href')

zjnames = html1.xpath('//ul[@class="cf"]/li/a/text()')

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

print(zjname+'\n'+zjurl)

  效果图:

  

  ​

  分析 (x3)

  你知道你为什么不把章节命名的txt文件保存在文件夹中吗?

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

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

  那么采集章节内容和方法就不赘述了,完全一样,章节内容也如上图源码中所示。

  

  ​

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

  代码开始:

  ```

当然在学习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) # 创建文件夹

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

html1 = etree.HTML(req2)

zjurls = html1.xpath('//ul[@class="cf"]/li/a/@href')

zjnames = html1.xpath('//ul[@class="cf"]/li/a/text()')

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

print(zjname+'\n'+zjurl)

req3 = requests.get('http:' + zjurl).text

html2 = etree.HTML(req3)

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

nr = '\n'.join(nrs)

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

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

with open(file_name, 'a', encoding="utf-8") as f:

f.write(nr)

  效果图:

  

  ​

  我想说清楚,我们只抓取了第一页的数据。那么如何抓取整个站点的数据呢?

  分析 (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'https://www.qidian.com/all/page{i}/'

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) # 创建文件夹

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

html1 = etree.HTML(req2)

zjurls = html1.xpath('//ul[@class="cf"]/li/a/@href')

zjnames = html1.xpath('//ul[@class="cf"]/li/a/text()')

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

print(zjname+'\n'+zjurl)

req3 = requests.get('http:' + zjurl).text

html2 = etree.HTML(req3)

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

nr = '\n'.join(nrs)

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

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

with open(file_name, 'a', encoding="utf-8") as f:

f.write(nr)

  我有话要说

  

  ​

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

  emmm原来之前录了个视频教程,但是离开公司后就丢了。在这里向大家说声抱歉。

  但是文章的话现在写了。每个文章我都会讲得很仔细,所以要花很长时间,一般是两个多小时,每个文章达到五个大约一千字。

  原创不容易,再次感谢大家的支持。

  ①2000多本Python电子书(主流经典书籍都有)

  ②Python标准库资料(最全中文版)

  ③项目源码(四十或五十个有趣经典的动手项目和源码)

  ④Python基础、爬虫、Web开发、大数据分析视频(适合小白学习)

  ⑤ Python 学习路线图(告别不受影响的学习)

  ```

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

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

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

还有大牛解答!

```

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线