1-4python爬取笔趣阁⼩说(附带完整代码)
笔趣看是⼀个盗版⼩说⽹站,这⾥有很多起点中⽂⽹的⼩说,该⽹站⼩说的更新速度稍滞后于起点中⽂⽹正版⼩说的更新速度。并且该⽹站只⽀持在线浏览,不⽀持⼩说打包下载。所以可以通过python爬取⽂本信息保存,从⽽达到下载的⽬的
以⾸页的《》作为测试:
通过requests库获取:
# -*- coding:UTF-8 -*-
import requests
if __name__ == '__main__':
target = 'www.biqukan/1_1094/5403177.html'
req = (url=target)
)
运⾏代码,可以看到如下结果:(获取到他的html⽂本,你可以通过chrome审查元素来对照)
可以看到,我们很轻松地获取了HTML信息。但是,很显然,很多信息是我们不想看到的,我们只想获得如右侧所⽰的正⽂内容,我们不关⼼div、br这些html标签。如何把正⽂内容从这些众多的html标签中提取出来呢?这就是本次实战的主要内容。
Beautiful Soup
爬⾍的第⼀步,获取整个⽹页的HTML信息,我们已经完成。接下来就是爬⾍的第⼆步,解析HTML信息,提取我们感兴趣的内容。对于本⼩节的实战,我们感兴趣的内容就是⽂章的正⽂。提取的⽅法有很多,例如使⽤正则表达式、Xpath、Beautiful Soup等。对于初学者⽽⾔,最容易理解,并且使⽤简
单的⽅法就是使⽤Beautiful Soup提取感兴趣内容。
Beautiful Soup的安装⽅法和requests⼀样(我安装的是3.7版本):
pip3 install beautifulsoup4
通过google chrome中审查元素⽅法,查看⼀下我们的⽬标页⾯,你会看到如下内容:
可以看到⽂本内容都放置在<div id="content", class="showtxt">这个标签中 ,这样就可以开始通过库来获取这个标签中的内容:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'www.biqukan/1_1094/5403177.html'
req = (url = target)
bf = )
#查询所有div标签,并且class为'showtxt'
texts = bf.find_all('div', class_ = 'showtxt') print(texts)
获取到如下内容:
我们可以看到,我们已经顺利匹配到我们关⼼的正⽂内容,但是还有⼀些我们不想要的东西。⽐如div标签名,br标签,以及各种空格。怎么去除这些东西呢?我们继续编写代码:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'www.biqukan/1_1094/5403177.html'
req = (url = target) html =
bf = BeautifulSoup(html)
texts = bf.find_all('div', class_ = 'showtxt')
#replace(‘\xa0’*8,’\n\n’)就是去掉⼋个空格符号,并⽤回车代替
print(texts[0].place('\xa0'*8,'\n\n'))
find_all匹配的返回的结果是⼀个列表。提取匹配结果后,使⽤text属性,提取⽂本内容,滤除br标签。随后使⽤replace⽅法,剔除空格,替换为回车进⾏分段。 在html中是⽤来表⽰空格的。replace(‘\xa0’*8,’\n\n’)就是去掉下图的⼋个空格符号,并⽤回车代替:
程序运⾏结果如下:
我们已经顺利获得了⼀个章节的内容,要想下载正本⼩说,我们就要获取每个章节的链接。我们先分析下⼩说⽬录:
通过审查元素,我们发现可以发现,这些章节都存放在了class属性为listmain的div标签下,选取部分html代码如下:
<div class="listmain">
<dl>
<dt>《⼀念永恒》最新章节列表</dt>
<dd><a href="/1_1094/15932394.html">第1027章第⼗道门</a></dd>
<dd><a href="/1_1094/15923072.html">第1026章绝伦道法!</a></dd>
<dd><a href="/1_1094/15921862.html">第1025章长⽣灯!</a></dd>
<dd><a href="/1_1094/15918591.html">第1024章⼀⽬晶渊</a></dd>
<dd><a href="/1_1094/15906236.html">第1023章通天道门</a></dd>
<dd><a href="/1_1094/15903775.html">第1022章四⼤凶兽!</a></dd>
<dd><a href="/1_1094/15890427.html">第1021章鳄⾸!</a></dd>
<dd><a href="/1_1094/15886627.html">第1020章⼀触即发!</a></dd>
<dd><a href="/1_1094/15875306.html">第1019章魁祖的⽓息!</a></dd>
<dd><a href="/1_1094/15871572.html">第1018章绝望的魁皇城</a></dd>
<dd><a href="/1_1094/15859514.html">第1017章我还是恨你!</a></dd>
<dd><a href="/1_1094/15856137.html">第1016章从来没有世界之门!</a></dd>
<dt>《⼀念永恒》正⽂卷</dt> <dd><a href="/1_1094/5386269.html">外传1 柯⽗。</a></dd>
<dd><a href="/1_1094/5386270.html">外传2 楚⽟嫣。</a></dd> <dd><a href="/1_1094/5386271.html">外传3 鹦鹉与⽪冻。</a></dd> <dd><a href="/1_1094/5403177.html">第⼀章他叫⽩⼩纯</a></dd> <dd><a href="/1_1094/5428081.html">第⼆章⽕灶房</a></dd> <dd><a href="/1_1094/5433843.html">第三章六句真⾔</a></dd> <dd><a href="/1_1094/5447905.html">第四章炼灵</a></dd>
</dl>
</div>
www.biqukan/1_1094/5403177.html
<a href="/1_1094/5403177.html">第⼀章他叫⽩⼩纯</a>
我们先获取listmain中的内容:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'www.biqukan/1_1094/'
req = (url = target)
html =
div_bf = BeautifulSoup(html)
div = div_bf.find_all('div', class_ = 'listmain')
python怎么读取桌面上的文件
print(div[0])
还是使⽤find_all⽅法,运⾏结果如下:
很顺利,接下来再匹配每⼀个<a>标签,并提取章节名和章节⽂章。如果我们使⽤Beautiful Soup匹配到了下⾯这个<a>标签,如何提取它的href属性和<a>标签⾥存放的章节名呢?
<a href="/1_1094/5403177.html">第⼀章他叫⽩⼩纯</a>
⽅法很简单,对Beautiful Soup返回的匹配结果a,使⽤a.get(‘href’)⽅法就能获取href的属性值,使⽤a.string就能获取章节名,编写代码如下:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
server = 'www.biqukan/'
target = 'www.biqukan/1_1094/'
req = (url = target) html =
div_bf = BeautifulSoup(html)
div = div_bf.find_all('div', class_ = 'listmain')
a_bf = BeautifulSoup(str(div[0]))
a = a_bf.find_all('a')
for each in a:
print(each.string, server + ('href'))
因为find_all返回的是⼀个列表,⾥边存放了很多的<a>标签,所以使⽤for循环遍历每个<a>标签并打印出来,运⾏结果如下。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。