爬虫实战练习(二)

爬取三国演义章节名称及内容

一、知识点

bs4解析数据

二、思路

  1. 请求章节页数据
  2. bs4处理章节页数据,获得章节名称及内容的url
  3. 请求章节内容数据
  4. bs4处理章节内容数据,获得章节内容
  5. 将章节内容存到文件中

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#  爬取三国演义章节标题和内容

from bs4 import BeautifulSoup
import requests
import time


def get_url():
url = "https://www.shicimingju.com/book/sanguoyanyi.html"
return url

def get_header():
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
'Content-Type': 'application/json; charset=utf-8'
}
return headers

def run_main():
page_text = requests.get(get_url(),get_header()).text
# 实例化一个BeautifulSoup对象,以lxml方式解析
soup = BeautifulSoup(page_text, 'lxml')
# 获取含有章节名称和详情url的li列表
li_list = soup.select('.book-mulu > ul > li')
# 打开文件
fp = open('./sanguoyanyi.txt', 'w', encoding='utf-8')
# 处理页面数据
for li in li_list:
time.sleep(3)
# 获取章节名
chapter_name = li.a.string
# 获取章节内容的url
content_url = "https://www.shicimingju.com" + li.a['href']
# 请求章节内容
content_text = requests.get(content_url, get_header()).text
# 处理详情数据,获取目标内容
detail_soup = BeautifulSoup(content_text, 'lxml')
chapter_content = detail_soup.find('div',class_='chapter_content').text
# 将内容写入文件
fp.write(chapter_name + ":\n" + chapter_content + "\n")
print("爬取成功")

if __name__ == '__main__':
run_main()
------------- End -------------