python小白爬虫小说
1:说明
当我们新手小白进入到爬虫的初学者阶段时,有一定的爬虫知识储备,就想着爬点什么东西来练手,又没有什么好的指导,这里看完那里看,这里也不是老师教的类型那里也不是,那么好的机会不久来了嘛。
2:步入
当你看到这篇文章时,说明你已经有了一定的爬虫知识,那么对网页的分析也有了一定的了解,这里就不细细简介了。本次我们要爬的网站是:丛横中文网
我们从中任意选择一篇你喜欢的文章
获取他的url
3:代码
接下来就是代码的书写
# 首先导入我们必须要的库
import requests
from bs4 import BeautifulSoup
# 此处是请求头的完善
headers = {
***#此处省略
}
# 这是我们要获取数据的初始网页链接
current_url = 'https://read.zongheng.com/chapter/1296262/74506344.html'
# 4. 首次请求初始页面
response = requests.get(url=current_url, headers=headers) # 因为是通过get请求的方式传递数据,此处我们需要用到的就是库中的get方法,而不是post方法
print(response) # 此处我们查看是否在请求方面完善,打印反馈给我们的response,查看状态码是否为200,如果不是,那就说明不够完善,要么在请求头中缺失必有得参数,或者存在载荷等重用的必要参数
在上述的代码中我们获取了必要的请求参数,并且得到了状态码为正常
我们再次分析,要如何拿到我们需要的东西,也就是小说文字部分
我们可以通过response中的text文本,也就是初始页面的html代码
response.encoding = response.apparent_encoding # 自动识别编码,避免乱码
soup = BeautifulSoup(response.text, 'html.parser') # 解析HTML
print(response.text)
当我们得到该网页的html后,再次分析,文字内容具体在哪里
分析后发现,小说的内容在一个id为##的div中
# 定位class为content的div,再获取所有p标签
content_div = soup.find('div', class_='*') # 找到目标div
if content_div:
p_tags = content_div.find_all('p') # 获取div内所有p标签
# 打印每个p标签的文本内容
for p in p_tags:
print(p.get_text(strip=True)) # strip=True去除首尾空白
print()
else:
print("未找到class为'content'的div")
那么在这里我们就获取了本页的所有小说内容,但是我们发现我们是来获取小说的而不是获取某一页的,所以要获取所有的小说内容,我们可以通过一个while循环来获取自己所需要的页数,并且还要通过分析来找到下一页的url的链接
在此前我们需要解释一下,我们点击下一页时分析cookie值不一样了,我们可以同过一个创建对话来自动处理cookie值的更新
import requests
from bs4 import BeautifulSoup
count = 0
user_exitinput = int(input('请输入你要结束的章节'))
# 创建会话(自动处理Cookie更新)
session = requests.Session()
# 初始页面url
current_url = 'https://read.zongheng.com/chapter/1296262/74506344.html'
while count < user_exitinput:
headers = {
***
}
# 首次请求初始页面
response = session.get(current_url, headers=headers)
response.encoding = response.apparent_encoding # 自动识别编码,避免乱码
soup = BeautifulSoup(response.text, 'html.parser') # 解析HTML
# 定位class为content的div,再获取所有p标签
content_div = soup.find('div', class_='content') # 找到目标div
if content_div:
p_tags = content_div.find_all('p') # 获取div内所有p标签
# 打印每个p标签的文本内容
for p in p_tags:
print(p.get_text(strip=True)) # strip=True去除首尾空白
print()
else:
print("未找到class为'content'的div")
# 提取下一章链接
reader_bottom = soup.find('div', class_='*')
if not reader_bottom:
print("未找到reader-bottomdiv")
exit()
next_chapter_a = reader_bottom.find('a', string='下一章')
if not next_chapter_a:
print("未找到下一章a标签")
exit()
current_url='https://read.zongheng.com' + next_chapter_a.get('href')
count += 1
4:反思
最后就是对本次训练的反思,我们首先通过获取第一页的小说内容分析,再在此次的基础上获取下一页的内容,以此类推,获取自己想要的页数
2367

被折叠的 条评论
为什么被折叠?



