关键句采集 原创(利用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!
还有大牛解答!
```