在家太无聊了,最近正在重拾大一学的爬虫技术,只能说时过境迁,忘得都差不多了。
这不昨天偶尔发现了一个网站(嘿嘿)准备浅试一波。
呕吼,孙子兵法!浅读一下?
import requests
from bs4 import BeautifulSoup
import re
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42'
}
base_url = 'https://www.gushici.net' # 提取共同网址特征
book_url = base_url + '/book/225/'
# 爬取网页内容
page_text = requests.get(url=book_url, headers=headers).text
with open('../Spider/孙子兵法.html','w',encoding='utf-8') as fp:
fp.write(page_text)
fp = open('../Spider/孙子兵法.html', 'r', encoding='utf-8')
soup = BeautifulSoup(fp, 'lxml')
a_list = soup.select('.bookcont dl > dd > a') # 获取每个篇章对应的超链接的a标签
# print(li_list)
for a in a_list:
detail = a['href'] # 获取文件超链接
detail_url = base_url + detail # 获取最终每个篇章对应的网址
print(detail_url)
detail_text = requests.get(detail_url,headers=headers).content # 获取内容
detail_soup = BeautifulSoup(detail_text,'lxml')
title = detail_soup.select('.shici-box > h1 > span > b')[0].string # 获取文章题目
print(title)
# 文件存储,按照篇章名称命名
with open('../Spider/'+re.split('·',title)[1]+'.txt','w',encoding='utf-8') as file_content:
contents = detail_soup.select('.shici-box-text > p')
for content in contents:
graph = content.string # 注意br标签
# 由于中间<军行篇>中间会在p标签中遇见一个<br>标签,而使用content.string时string属性只能匹配成对的标签,所以不进行处理会直接报错。
# 这里我采取的方式是将content转为字符串后再用正则将<br>标签去除掉,然后再次生成BeautifulSoup对象,之后再进行处理
if str(graph) == 'None':
new_Content = str(content).replace('<br/>', '')
new_Soup = BeautifulSoup(new_Content)
graph = new_Soup.select('p')[0].string
file_content.write(graph+'\n')
# print(graph)
print(re.split('·',title)[1]+'.txt'+'存储完毕!')
不知道大家感不感兴趣哈,反正我之前就对爬虫情有独钟,感觉很NB的东西,一直不敢尝试。
但其实,试过才知道,这种发自内心的喜悦是别人体会不到的。尤其是在中途发现问题和解决问题的时候。
所以,如果你也想学或正在学的话,一定要坚持下去哦。