python爬虫爬取《斗破苍穹》小说全文

网络爬虫的入门学习:python爬虫爬取小说全文

  1. python爬虫首先导入基本爬虫库requests:import requests,安装命令pip install requests,使用pycharm可以直接在settings中下载
  2. 导入解析HTML标签的python库bs4,同样需要下载,pip install bs4,也可以直接在pycharm的settings中下载,其实在解析HTML代码中只需要导入BeautifulSoup类就可以实现相应功能,代码为from bs4 import BeautifulSoup
  3. 要永久保存说就需要用到和文件相关的库os
    import os
  4. 首先需要创建相应文件来保存小说
if not os.path.exists('D:/斗破苍穹'):
	os.mkdir('D:/斗破苍穹')###创建目录
  1. 设置url,伪装UA(User-Agent)
url1='https://www.rmxs8.com/10121/'
url2='https://www.rmxs8.com/10121_2/'
headers={
     
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}#使用字典中的键值对来替换原本的User-Agent
#原小说有两个网址存放的都是斗破苍穹的目录所以需要设置两个url
  1. 对网页发起请求得到一个response对象
response1=requests.get(url=url1,headers=headers)
response2=requests.get(url=url2,headers=headers)
  1. 分析网页HTML标签,打开网页抓包工具,进入网页点击鼠标右键,点击检查,就会出现如图右侧:python爬虫爬取《斗破苍穹》小说全文_第1张图片
    观察HTML标签可以看出小说目录名都在
    的标签内的章节标题中,我们需要从HTML代码中提取出每一章的标题并且通过a标签中的网址进入详情页提取出章节内容,这时就需要用到bs4库中的BeautifulSoup类
text1=response1.text#返回网页1HTML代码
text2=response2.text#...网页2html...
soup1=BeautifulSoup(text1,'lxml')
soup2=BeautifulSoup(text2,'lxml')
#BeautifulSoup需要传入两个参数,一个是HTML代码,另一个则是需
#要采用的HTML解析器,除了lxml以外还可以使用html.parser(自带
#解析器),而lxml需要下载lxml库
a_list1=soup1.select('#novel10121.novel_list a')
a_list2=soup2.select('#novel10121.novel_list a')
#select方法的层级选择器,.代表类选择器,#代表id选择器,而我们
#需要爬取的小说内容在该类和id的标签中,空格' '代表跳级选择
#下一级的选择需要通过'>'符号来选择,例如select(#novel10121
# > li)就代表id=novel10121的下一级的li标签
a_list=a_list1+a_list2
#将所有的a标签都存入a_list列表中,方便后面的遍历
  1. 遍历刚才得到的所有a标签,每一章节的标题都在a标签中,只需要遍历列表,取出每一章节的名字,创建txt文件保存,并且得到详情页的网址,进行访问得到小说的内容保存至文件中
for a in a_list:
	chapter_title=a.string
	#string可以获取标签里的文本内容
	chapter_url=a['href']
	#观察可得网址总是在标签的href中,将其中网址取出即可
	chapter_response=resquests.get(url=chapter_url,headers=headers)
	#获取详情页的响应对象
	chapter_soup=Beautiful(chapter_response.text,'lxml')
	#再次用bs4来解析新获得的HTML标签
	chapter_content=chapter_soup.find('div',class_='content').text
	#进入详情页同样通过抓包工具发现小说内容都在.content之下只要取出这个div下的所有文本信息就可以完成提取。
	with open('D:/斗破苍穹/'+chapter_title+'.txt','w',encoding='utf-8') as fp:
		fp.write(chapter_content)
		#将提取的小说内容保存至文件中
		fp.close()
		#关闭文件(其实不管也行)
	chapter_response.close()
	#切断与当前网址的联系,否则由于程序过于频繁的访问网站可能会让网站误以为是攻击行为从而切断联系

总结:以上是所有的步骤,下面是完整的代码,有兴趣的小伙伴可以直接复制粘贴运行(但是要确保所有有需要的库的下载完毕,否则会报一堆错<#-#>)

import requests
import os
from bs4 import BeautifulSoup
if not os.path.exists('D:/斗破苍穹'):
    os.mkdir('D:/斗破苍穹')
url='https://www.rmxs8.com/10121/'
headers={
     
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
response1=requests.get(url=url,headers=headers)
response2=requests.get(url='https://www.rmxs8.com/10121_2/')
page_text1=response1.text
page_text2=response2.text
soup1=BeautifulSoup(page_text1,'lxml')
soup2=BeautifulSoup(page_text2,'lxml')
a_list1=soup1.select('#novel10121.novel_list a')
a_list2=soup2.select('#novel10121.novel_list a')
a_list=a_list1+a_list2
for a in a_list:
    chapter_title=a.string
    if chapter_title[0:4]=='斗破苍穹':
        title_list=list(chapter_title)
        for i in range(4):
            title_list.pop(0)
        title_str=''
        for i in range(len(title_list)):
            title_str+=title_list[i]
        chapter_title=title_str
    chapter_url='https://www.rmxs8.com'+a['href']
    chapter_response=requests.get(url=chapter_url,headers=headers)
    chapter_text=chapter_response.text
    chapter_soup=BeautifulSoup(chapter_text,'lxml')
    chapter_content=chapter_soup.find('div',class_='content').text
    with open('D:/斗破苍穹/'+chapter_title+'.txt','w',encoding='utf-8') as fp:
        fp.write(chapter_content)
        fp.close()
    chapter_response.close()
    print(chapter_title,'下载完成!!!')

以下是运行结果
python爬虫爬取《斗破苍穹》小说全文_第2张图片
python爬虫爬取《斗破苍穹》小说全文_第3张图片

你可能感兴趣的:(python,爬虫)