目录
学习python要多学多看,而且最主要的是要实践和应用所学习的内容,所写内容小白第一次开始写笔记,文章中不足多多指正。
声明
本文仅用于学习,不会商用!
本文如有侵权,请联系我删除文章!
1、导入库文件(导包)
import requests
import os
from bs4 import BeautifulSoup
复制代码
最重要的肯定是requests,对网页的访问请求。用Beautfulsoup来解析网页。
2、构造请求头
请求头其实就是模拟浏览器对网页进行浏览获取所需要的信息。使用请求头来模拟浏览器对网页进行访问可避免网页不允许爬虫进行访问,这个就设计到反爬了,可参考下面的文章传送门
3、访问网页
使用requests的get方法访问网页
response = requests.get(url=url,headers=headers)
复制代码
4、解析网页
将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。
这个可参考菜鸟编程中的介绍 传送门
小结
以上四个步骤是爬虫最简单的四个步骤,至于接下来的操作就是对于所需要的内容进行提取,而爬取不同的内容所采用的方法很可能不同。
5、网页分析
首先我随机选择了一本完结的小说(ps:毕竟看着才爽)进入到页面先分析其网页构造
我们要爬取的内容是小说,小说包括其名字,章节名字,章节内容。
因为我对于html不是很了解,所以我的办法是看网页是否被包括在里面。网页就相当于容器,而我们所需要的内容都在这个容器里面,但我们怎么确定在容器的那些地方呢。就在蓝色的内容之中,我们需要像剥洋葱那样一层一层的剥开,只拿我们所需要的内容。
这个里面是对于这本小说的介绍,包括其名字、介绍、作者等内容。因为笔者本次的重点是小说内容,对于这里笔者就不再赘述。
笔者所需要的内容是这个里面的。
一层层剥开结构,所呈现在面前的就是存储有小说内容的一些标签。
笔者所需要的内容都在a标签之中,而a标签的父标签是dd,dd的父标签dl标签,dl的父标签是div,div有class、id等属性。
6、数据提取
response = requests.get(url=url,headers=headers)
html= response.text
soup = BeautifulSoup(html,'html.parser')
novel_lists = soup.select('#list dd a')
novel_list = novel_lists[12:]
#因为根据网页中的反馈,前12章内容是后面重复的内容,通过切片过滤掉重复的章节
复制代码
找到了存储小说章节内容的dd标签,而所需要的小说内容等都在所有的dd标签中,所以接下来就是对所需要内容的提取了。
所得到的内容是一个列表,接下来只需要遍历列表提取我们所需要的内容就好了。
for i in range(len(novel_list)):
novel_name = novel_list[i].text
novel_url = url+novel_list[i].get("href")
复制代码
进入到章节链接里面,再次分析其其结构,所分析的结果就是我们所需要的小说内容在div标签下,id=”content”的属性中,我们再次提取:
response_1 = requests.get(url=novel_url,headers=headers)
html_1 = response_1.text
soup_1 = BeautifulSoup(html_1, 'html.parser')
novel_content = soup_1.find('div', id='content').text
复制代码
7、写入文件
file = open(path,'a',encoding='utf-8')
file.write(novel_name)
file.write(novel_content)
print(novel_name + '下载完成')
file.close()
print('全部下载完成!!!')
复制代码
8、运行结果
9、完整代码
import os
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
path = 'D:/爬虫/novel/牧神记.txt'
if not os.path.exists(path):
os.mkdir('D:/爬虫/novel/牧神记.txt')
url = 'https://www.xbiquge.cc/book/14719/'
response = requests.get(url=url,headers=headers)
html= response.text
soup = BeautifulSoup(html,'html.parser')
novel_lists = soup.select('#list dd a')
novel_list = novel_lists[12:]
for i in range(len(novel_list)):
novel_name = novel_list[i].text
novel_url = url+novel_list[i].get("href")
response_1 = requests.get(url=novel_url,headers=headers)
html_1 = response_1.text
soup_1 = BeautifulSoup(html_1, 'html.parser')
novel_content = soup_1.find('div', id='content').text
file = open(path,'a',encoding='utf-8')
file.write(novel_name)
file.write(novel_content)
print(novel_name + '下载完成')
file.close()
print('全部下载完成!!!')
复制代码
总结
过程中,遇到很多问题,但是有许多资源可以让我借鉴,参考。不定时的写写学习笔记,对于我们对知识点的理解以及记忆会更加有作用。不足的地方,请大佬多多指正,望不吝赐教!