python按章节分割txt_python爬虫实战1,爬取小说

540641c88aabaaab17277e763b6aa93b.png

通过bs4模块爬取小说。

注意:bs4只能用在python中

'''
古诗词网爬取《西游记》
bs4这种解析方式只能用在python中

实例化soup对象的两种方法:
1. 本地文件
fp=open('  ','lxml') 把赋值成功的fp扔进汤里
soup=BeautifulSoup(fp,'html)

2. 网络文件:
soup = BeautifulSoup(page_text, 'lxml')

'''

from bs4 import BeautifulSoup
import requests

# 要爬取的小说主页
url='https://www.shicimingju.com/book/xiyouji.html'
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36' }

# 用.content.decode()方法,用.text属性可能出现乱码
page_text=requests.get(url,headers=headers).content.decode()

# 通过美丽汤来解析主页里【每章节的标题】和【每个章节的url]
soup1=BeautifulSoup(page_text,'lxml')

# 通过分析发现,a标签里的text文本内容就是每个章节的标题。a标签里的href属性就是每个章节的url。
# 可以采用select方法的层级选择器拿到所有的li标签下的a标签
# 注意类选择器前面要打一个点.
tag_a_list=soup1.select('.book-mulu>ul>li>a')
print(tag_a_list)  #返回一个a标签的列表

# 注意这一步不要写进for循环里面了,不然要反复打开文件。
f=open('西游记.txt','w',encoding='utf-8')   

#遍历[a标签]列表
for a in tag_a_list:
    title=a.text #获取a标签里的文本

    # 获取a标签中href对应的属性值,拼接起来
    chapter_url='https://www.shicimingju.com/'+a['href']

    chapter_content=requests.get(chapter_url,headers=headers).content.decode()

    soup2=BeautifulSoup(chapter_content,'lxml')

    # 找到章节内容对应的标签
    div_tag=soup2.find('div',class_='chapter_content')
    content=div_tag.text
    
    f.write(title+':'+content+'n')     #每个章节的内容写完了就换行
    print(title,'爬取完毕!')

a7556cbc55163f85416acc9dff932554.png
主页的源码

032d32976f37c63a911efc13f09dbec8.png
章节页的源码

知识点总结:

  1. 通过get方法发送请求后,用.content.decode( )方法避免乱码
  2. soup.find('标签名', class_=' ')和soup.select( ) 方法来定位标签。select方法可以按层级一层一层找
  3. select( )方法返回的是一个列表,里面装着要定位的标签。这里不能直接.text,不然会报错No attribute 'text',没有text这个属性。要遍历,一个一个拿出a标签,才可以用.text属性。
  4. f=open('西游记.txt','w',encoding='utf-8') ,这一步不要写进for循环里面了,不然要反复打开文件。

800e3153f5fb3773096b8f5c8a7d2983.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值