zl程序教程

您现在的位置是:首页 >  后端

当前栏目

6. python爬虫——基于bs4数据解析技术爬取文章

Python爬虫技术数据 基于 解析 文章 爬取
2023-09-11 14:20:02 时间

python爬虫——基于bs4数据解析技术爬取文章

1.需求

爬取https://www.shicimingju.com/book/sanguoyanyi.html上三国演义的所有内容

2.分析

进入网站后,发现为单页,内容在跳转链接里
在这里插入图片描述
使用抓包工具进行查看,发现跳转到详情内容的章节,均存在于< div calss=“book-mulu”>下的a标签中,< a >具有属性href具有对应的详情内容URL和每一章的章节名字。
在这里插入图片描述
因为需要获取所有章节的URL和文本内容这两个数据,因此使用bs4中的select()要比find()更为方便,通过select层级选择器’div > ul > li > a’来获取a标签中的属性及内容。

获取到属性后,便可通过URL跳转到详情页中,打开详情页
在这里插入图片描述
发现文章中的内容均在< div class=“chapter_content”>下的< p>标签中,此时需用find(‘div’,class_=‘chater_content’)便可以实现文本内容的获取。
在这里插入图片描述

3.代码

import requests
from bs4 import BeautifulSoup

if __name__ == "__main__":
    # 对首页的页面数据进行爬取
    url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
    headers = {
        'User-Agent':'Mozilla/....'
    }
    page_text = requests.get(url=url,headers=headers).text
    
    # 在首页中解析出章节的标题和详情页的url
    # 1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup = BeautifulSoup(page_text,'lxml')
    # 解析章节标题和详情页的url
    a_list = soup.select('.book-mulu > ul > li > a')
    with open('./sanguo.txt','w',encoding='utf-8') as fp:
        for a in range(len(a_list)-1):
            title = a_list[a].string
            detail_url = 'http://www.shicimingju.com'+a_list[a]['href']
            # 对详情页发起请求,解析出章节内容
            detail_page_text = requests.get(url=detail_url,headers=headers).text
            # 解析出详情页中相关的章节内容
            detail_soup = BeautifulSoup(detail_page_text,'lxml')
            div_tag = detail_soup.find('div',class_='chapter_content')
            # 解析到章节的内容
            content = div_tag.text
            fp.write(title+':'+content+'\n')
            print(title,'success!')

4.实现效果

在这里插入图片描述

在这里插入图片描述