最简单的python爬虫案例,适合入门学习( 二 )


内容与前面在Preview里看到的一样,说明已经成功获得了网页内容 。
3)、解析网页内容,获得数据
所有要爬取的数据,都在上面的soup结果里,但还有更多是我们不需要的数据 。所以接下来第3步就是对上面的结果内容进行操作,以获得我们想要的内容 。
1)根据目标,我们首先要获得小说的标题和章节标题
在开发者工具里,分析网页内容,发现我们的目标之一小说和章节的标题分别位于下图所示位置:

最简单的python爬虫案例,适合入门学习

文章插图
图3-7 找到标题所处位置
A、小说标题“圣墟”在下面两个位置都出现过,写解析代码就可以了:
<a href=https://www.isolves.com/it/cxkf/yy/Python/2020-05-14/"/book/4772/">圣墟<a href=https://www.isolves.com/it/cxkf/yy/Python/2020-05-14/'https://www.biqiuge.com/book/4772/' target='_blank' title="圣墟">圣墟很明显第一个相对比简单点,所以,我们通过解析第一个位置内容来提取出标题“圣墟”
t1 = soup.find('a', href=https://www.isolves.com/it/cxkf/yy/Python/2020-05-14/"/book/4772/"').get_text()代码解析: 上面两处标题都位于<a,....../a>之间,所以“a”就是我们要用的第一个参数,由于有a参数的代码还有很多,为了精准定位就是这个位置的a,我们发现属性href的值不同而且貌似是独一无二的,所以将其作为关键字放进代码里,就得到了此处的这段代码 。然后用.get_text()将这段代码里的文字给爬取出来,就得到了我们最终想要的小说标题——“圣墟” 。上面的代码如果将href的参数值改为:'https://www.biqiuge.com/book/4772/',也能得到相同的结果
B、章节标题在网页代码中也出现过多次,但是我们只需找到一处解析得到即可,根据上面的经验,我们选最简单的一处为:
<h1>第一章 沙漠中的彼岸花</h1>编写代码:
t2 = soup.find('h1').get_text()2)获得小说内容
继续分析网页代码,发现小说内容的位置为:
<div id="content" class="showtxt"><script>App2();</script><br /> 大漠孤烟直......
说明小说内容位于<div ....../div >之间,所以将div作为第一个参数,由于div出现了很多次,所以我们需要继续用此处独有的参数作为关键字,我们将id="content" class="showtxt"同时作为参数放到代码里,这样代码就为:
tt = soup.find('div', id="content", class="showtxt").get_text()此时,由于class在python里代表“类”,为敏感词,作为关键字放在代码里容易混淆,所以我们将敏感词作为关键字时,需要在其后面加一个下划线,将代码class="showtxt"改为:class_="showtxt" 。运行后,小说内容就已经在tt里了 。我们可以通过print(tt)看到效果 。
4)、保存内容
虽然小说标题、内容都已经爬取到了,但到哪里看呢,我们不可能每次都用python用print()运行后看 。我们可以将刚才爬取到的标题、内容,写入到一个txt文件里 。这就用到os模块了 。
 此时运行程序,就能在e盘发现已新生成了文件“小说.txt文件",打开,发现,所有想要的内容已经写入到文件里了如图3-8 。但是小说内容没有换行,阅读起来不方便,且前面有个多余的app2() 。
 
最简单的python爬虫案例,适合入门学习

文章插图
图3-8 爬取的效果
为了达到更好的效果,我们将代码:
tt = soup.find('div', id="content", class="showtxt").get_text()优化为:
tt = soup.find('div', id="content", class_="showtxt").text.replace(' ','n').replace('app2();','n')即将app2()和空格符都替换为换行符 。运行后得到效果为:
 
最简单的python爬虫案例,适合入门学习

文章插图
图3-9 优化后最终的爬取结果
至此,一个简单的爬取就完成了 。
其实,该网址内容完全可以直接复制就能得到,本文之所以还大费周章进行爬取,不过是借用这个简单的静态网页,体验一下爬虫4步骤的流程,为后续批量爬取网页中的小说、图片以及爬取动态网页数据做基础 。
4、附录本文代码(完整)# -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoup# 第一步:发出访问请求url = "https://www.biqiuge.com/book/4772/2940354.html"response = requests.get(url)# 第二步:获得网页信息soup = BeautifulSoup(response.content, 'lxml')# 第三步:解析网页数据t1 = soup.find('a', href=https://www.isolves.com/it/cxkf/yy/Python/2020-05-14/"/book/4772/").get_text()t2 = soup.find('h1').get_text()tt = soup.find('div', id="content", class_="showtxt").text.replace(' ','n').replace('app2();','n')# 第四步:保存内容f = open(r"e:小说1.txt", 'a+', encoding='utf-8')f.write(t1 + 'n')f.write(t2 + 'n')f.write(tt)f.close()print('下载完成')


推荐阅读