小菌之前分享过几篇关于python爬虫的实战经典案例,相信许多没有学过python的小伙伴们肯定都按奈不住纷纷自学去了,哈哈O(∩_∩)O本次小菌带来的同样是适合入门级爬虫爱好者的一个基础案例——爬取《斗破苍穹》全文内容~
首先我们先根据网址来到http://www.doupoxs.com/
来到斗破小说网,选中我们这次爬取的目标!
双击进入到斗破苍穹小说的介绍
先进入第一章,观察网址的url的构成,http://www.doupoxs.com/doupocangqiong/1.html
根据对小说的页数观察,我们发现该小说一共有1645页数据。于是我们就可以先构建url的列表推导式!
urls = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(i) for i in range(1, 1646)]
我们再根据打开谷歌检查器的检查,分析网页源码的构成。
因为我们需要获取到每一章小说的标题提作为我们保存小说内容的文本名,所有根据网页源码的构成情况,利用BeautifulSoup将其获取。而每一章小说的内容都保存在标签中,我们只需要根据正则表达式便可以轻松将其获取!
具体的源码如下所示
"""
@File : 《斗破苍穹》小说内容爬取.py
@Time : 2019/10/31 10:30
@Author : 封茗囧菌
@Software: PyCharm
转载请注明原作者
创作不易,仅供分享
"""
import requests
from bs4 import BeautifulSoup
import re
import time
# 加入请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
def get_info(url):
res = requests.get(url, headers=headers)
res.encoding = "utf-8"
# 解析网页数据
soup = BeautifulSoup(res.text, 'html.parser')
# 获取到标题
title = soup.select("body > div.main > div.entry-tit > h1")[0]
print(title.get_text())
# 利用正则表达式匹配到内容
contents = re.findall('(.*?)
', res.content.decode('utf-8'), re.S)
f = open('F:/课程参考图片/斗破苍穹/test/' + title.get_text() + ".html", "a+")
for content in contents:
f.write(content + "\n")
f.close()
# 程序主入口
if __name__ == '__main__':
urls = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(i) for i in range(1, 1646)]
for url in urls:
get_info(url)
print("本章url:" + url)
# 设置每次循环一次的休眠时间
time.sleep(1)