python爬虫系列:BeautifulSoup下载小说讲解(零基础向)

系列文章目录

python爬虫系列:Xpath下载图片讲解(零基础向)传送门

python爬虫系列:requests下载音乐讲解(零基础向)(正在筹划)


目录

系列文章目录

目录

第一步:思路

 第二步:代码 

总结


 

 

目录

 

先放上代码

import requests      #引入request库
from bs4 import BeautifulSoup
###以笔趣阁《圣域》为目标的爬取
url = "https://www.xbiquge.la/13/13959/"
#UA伪装   让浏览器识别为用户而非爬虫
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
#通过F12来查看是get还是post等
page_res = requests.get(url,headers=headers).text.encode("ISO-8859-1")
#lxml 需要用pip来安装  lxml是关于python的BeautifSoup的解释器
soup = BeautifulSoup(page_res,"lxml")  #这是使用的浏览器的源代码,也可使用本地的上传
list = soup.select(".box_con dl dd ")   #一步一步拿到url 和 名称,这个时候还没有转码
f = open("./xs.text","w",encoding="utf-8")   #关于文件操作可以去这个网站看https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640
#再通过循环获取全部章节的url
for li in list :
    title = li.a.string
    title_url = "https://www.xbiquge.la"+li.a["href"]  #主要分析目录的url和点击章节后章节的url    li.a["href"]就是获取<a>之间的href的
    title_url_text = requests.get(url=title_url,headers=headers).text.encode("ISO-8859-1")
    title_pupli = BeautifulSoup(title_url_text,"lxml")
    title_text = title_pupli.find("div",id="content")
    content = title_text.text
    f.write(title+":"+content+"\n")
    print(title,"爬取成功......")

第一步:思路

 

希望大家可以来我的博客网站,这样大家可以第一时间获取我的爬虫代码等,我也会及时在博客网站进行技术分享:个人博客 (ximenxiaoxue.github.io)

 

 

个人博客中对代码进行了修改,并且使用了多线程,推荐大家去我的个人博客(绝对免费),而且进行了优化,许多不能发的东西也都在博客中

 

 

做任何事情前都应该有一个清晰的思路思路(我做什么都没思路,不过思路是最重要的)。

  1. 首先,要明确自己要干什么。(我们的任务是爬取一部小说)
  2. 其次,分析你所要做的事情。(我们要爬取整步小说,要获取全部章节的url和网页的内容,并保存下来)
  3. 最后,进行我们所要做的事

 第二步:代码 

通过使用pip来进行安装,除了bs4以外还要安装它的解释器lxml,这两个东西要同时用到。

我相信你们应该安装了requests(来自萌新的肯定)。

pip install beautifulsoup4
pip install lxml
pip install requests

接下来通过F12进入开发者工具(应该是,不过感觉记错了)进行页面分析。

这样就可以看见我们需要什么来进行爬取,网页允许我们使用get来请求。headers这个东西可以进行UA伪装,让浏览器判定我们的爬虫是个用户,而非爬虫。在这里有时候还有坑,坑了我好几次,当你复制下面的内容时,可能会连空格也复制上,记得进行UA伪装时要检查一下有没有空格,如果有空格时,运行是会报错的。

我们现在来敲下代码。

先导入requests和BeautifulSoup,再进行UA伪装,在这里要看清了进行UA伪装时  : 两边要同时用" "。我在这里说一下这里面的所有的下划线什么的都是自己取的名字,不必那么纠结(写这个的原因是我之前就纠结这个,我就在想这写的都是什么东西,带下划线不是一些特别的词吗?,害)。

import requests      #引入request库
from bs4 import BeautifulSoup
###以笔趣阁《圣域》为目标的爬取
url = "https://www.xbiquge.la/13/13959/"
#UA伪装   让浏览器识别为用户而非爬虫
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
page_res = requests.get(url,headers=headers).text.encode("ISO-8859-1")

大家也应该注意到了      .encode("ISO-8859-1")       关于这个是个中文转码,要不然你获取的都是乱码,到时候你爬到的就不是小说了,是乱码。 还有这个     .text     是相当于以文本形式的输出(应该是吧,我是个萌新,啥也不知道)。

 接下来,就应该使用BeautifulSoup来进行了。

soup = BeautifulSoup(page_res,"lxml")  #这是使用的浏览器的源代码,也可使用本地的上传
list = soup.select(".box_con dl dd ")

想要使用BeautifulSoup,就应该这样使用,不过这是使用BeautifulSoup的一种,也可以使用本地保存的HTML来进行爬取,这个"lxml"是BeautifulSoup的解释器,所以要去使用它。

再讲下这个第二行的东西是个啥 ,是获取关于章节的那一行。

我们先用这个去看章节在的地方。

我们点的是一个章节 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 

这个   .select()   可以一步一步爬到章节的我们也可以通过  >  一级一级爬过去,由于我不会一步一步爬过去,干脆直接跳过一级一级的爬,通过空格来实现跳级,空格就表示跳级。div后面的那个class="box_con",在使用   .select()   的时候只需要写class=后面的就行了,记得要加点就像写的这个     .box_con    。刚才所写的是获取

之间的内容。

 我们爬完不是要保存吗?我们就先写个保存的地方。

f = open("./xs.text","w",encoding="utf-8")

在本目录下再创建一个text,在通过encoding="utf-8"来进行中文转码,不过我感觉这个地方我写的有点多余。这个w的意思是写入,我建议去大佬的文章去学传送门(萌新一枚,啥也不会)。

我们也是要获取全部章节的url,我们也总不能一个一个的看,一个一个的写吧。我们就可以用一个循环来写出全部的url,上一步我们也获取了

之间的内容,里面就有每个章节的url。请看下面的代码。

for li in list :
    title = li.a.string
    title_url = "https://www.xbiquge.la"+li.a["href"]  #主要分析目录的url和点击章节后章节的url    li.a["href"]就是获取<a>之间的href的

看到这个  title = li.a.string  你可能就又不墩了,这又是个什么玩意。

上面我们的list获取了

之间的内容,而之间还有点东西。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 

list.a就是获取包含的标签 ,而list.a.string就是获取中间的内容,也就是说,在这个时候我们就拿到了章节的名称(感觉打字有点累)。不过光拿到章节名称可不行,我们还要拿到章节的url以便来拿到章节的内容。

关于这个  li.a["href"]   就是拿到里面的url,大家也应该看到了  href  后面带有url,通过这个写法就拿到了url,不过这个url可是不全的,怎么才能拿到全部的url呢,我们再去分析一下它的网页。

20210621164756216.png watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU4Mjg4MTQy,size_16,color_FFFFFF,t_70

上面的是你没点击章节前的。

 当你点击第二章后。

20210621165010838.png

分析一下,你看你得到了什么。

这个是正常的目录 ,而第二章是 ,我们拿到的url是:/13/13959/5939025.html。所以你蹲怎么变成正常的url了吗?就是通过    "https://www.xbiquge.la"+li.a["href"]

 既然通过循环拿到了所有的url,那我们接下来就是获取url中的内容了。虽然看似很难其实很简单。先上代码吧。

title_url_text = requests.get(url=title_url,headers=headers).text.encode("ISO-8859-1")
title_pupli = BeautifulSoup(title_url_text,"lxml")

 这个我该咋说就和没写循环前的那个方法一样。

title_text = title_pupli.find("div",id="content")
content = title_text.text

你可能又又又不墩了,这又是个什么鬼,先看下网页。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 可见在这里面有小说的内容那怎么获取呢?

 

通过BeautifulSoup中的  .find  的用法来获取内容,fing可以寻找网页源码中的数据(是叫网页源码吧?),比如:所写的那个就是可以寻找整个网页源码中关于 

id="content" 下的内容,这样就获取了里面的内容。关于BeautifulSoup用法可以去这里看 传送门

第二行代码的意思就是获取内容,也可以通过  .get_text  或   .string  (没记错的话应该是)。

这样我们就只剩下保存在text中了 。

f.write(title+":"+content+"\n")
print(title,"爬取成功......")

通过  .write  来进行保存,这些应该可以自己悟了,f是刚开始时的代码。

总结

思路是最重要的。我们也要善于去分析,灵活运用各个库的使用方法,以达到自己的目的 

文章有不对的地方请大佬指正 。

 

 

 

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值