Python 使用 BeautifulSoup 解析网页一例

发布时间:2024年01月20日

BeautifulSoup是使用比较广泛也比较容易使用的一个库,使用前需要导入:

from bs4 import BeautifulSoup

但是安装包时,包名不是bs4而是beautifulsoup4,也就是说需要

pip install beautifulsoup4

以本人博客主页为例,看看BeautifulSoup的使用。

首先要请求页面,使用requests.get(),返回的text属性就是页面代码,为了研究方便,把结果保存为文件。

# coding: utf-8

import requests

def get_page_csdn():
    url = 'https://blog.csdn.net/cnnews?type=blog'
      
    headers = {
        'User-Agent': 'Mozilla/5.0',
    }

    response = requests.get(url,headers=headers)
    html = response.text
    with open(file='csdn.html',mode="w",encoding="utf-8") as f:
        f.write(str(html))
    return html

可以看到页面中的文章列表是位于<div class="mainContent"

<div class="mainContent" data-v-bb5f5e3e=""><div data-v-bb5f5e3e=""><div data-v-0db42936="" data-v-bb5f5e3e=""><div data-v-0db42936=""><article class="blog-list-box" data-v-0db42936="" data-v-6fe2b6a7=""><a data-report-click='{"spm":"3001.5501"}' data-report-query="spm=3001.5501" data-v-6fe2b6a7="" href="https://blog.csdn.net/cnnews/article/details/135380935" target="_blank"><div class="blog-img-box" data-v-6fe2b6a7=""><img alt="" class="course-img" data-v-6fe2b6a7="" src="https://img-blog.csdnimg.cn/img_convert/fad536e972e14ce4b37803185dc3b00c.png"/></div> <div class="list-box-cont" data-v-6fe2b6a7=""><div data-v-6fe2b6a7=""><div class="blog-list-box-top" data-v-6fe2b6a7=""><h4 data-v-6fe2b6a7="">Gstreamer的安装</h4>......

可以使用BeautifulSoup.find_all()或者BeautifulSoup.select()提取出标签内容

soup = BeautifulSoup( open( "./csdn.html" ),'html.parser' )

main = soup.find_all(name='div',attrs={"class":"mainContent"})

main = soup.select('div.mainContent')

find_all和select这两种没有区别,返回结果一样,不过如上select mainContent里的文章列表不能单独分离出来,所以要看看里面的标签,<article class="blog-list-box",这个标签返回的是文章列表,如果需要提取文章各个字段,就要看看<div class="blog-list-box-top",<div class="blog-list-content"等等,分别表示标题和简介。

from bs4 import BeautifulSoup

def prase_div():
    soup = BeautifulSoup( open( "./csdn.html" ),'html.parser' )
    #atticle_list = soup.find_all(name='div',attrs={"class":"blog-list-box-top"})#按照字典的形式给attrs参数赋值
    list_top = soup.select('div.blog-list-box-top')         #标题
    list_content = soup.select('div.blog-list-content')     #简介
    list_time = soup.select('div.view-time-box')            #发布时间
    list_view = soup.select('div.view-num-box')            #阅读
    for i in range(0,len(list_top)):
        print('{} \n{} {} {}\n'.format(list_top[i].text,list_content[i].text,list_time[i].text,list_view[i].text))

运行结果:

发现没有提取超链接,回过头来看html,上述字段是包裹在<a>标签里的,所以优化后的代码是访问<article class="blog-list-box"得到文章列表,然后提取每个字段其中超链接的提取为:

a.get('href')

from bs4 import BeautifulSoup

def prase_div():
    soup = BeautifulSoup( open( "./csdn.html" ),'html.parser' )
    list_article = soup.select('article.blog-list-box a')
    for a in list_article:
        print(a.get('href'))
        asoup = BeautifulSoup(str(a),'lxml')
        list_top = asoup.select('div.blog-list-box-top')         #标题
        list_content = asoup.select('div.blog-list-content')     #简介
        list_time = asoup.select('div.view-time-box')            #发布时间
        list_view = asoup.select('div.view-num-box')            #阅读
        print('{} \n{} {} {}\n'.format(list_top[0].text,list_content[0].text,list_time[0].text,list_view[0].text))
https://blog.csdn.net/cnnews/article/details/135380935
Gstreamer的安装 
如果出现pycairo安装报错。 
            发布博客?2024.01.04?·
           325?阅读?·

https://blog.csdn.net/cnnews/article/details/135360962
Gstreamer 使用appsrc传入随机生成的音频 
音频生成部分请自己发挥,听起来实在惨不忍听。 
            发布博客?2024.01.03?·
           298?阅读?·

https://blog.csdn.net/cnnews/article/details/135347205
Gstreamer 官方教程 basic-tutorial-7 python版 
提供了一个audiotestsrc源,经过tee复用到两路,一路播放声音,一路显示为波形。 
            发布博客?2024.01.02?·
           347?阅读?·

https://blog.csdn.net/cnnews/article/details/135344800
Gstreamer python 推流 rtmp 测试 
import sysimport gi#推流测试continueif dbg:else:breakbreak。 
            发布博客?2024.01.02?·
           903?阅读?·

https://blog.csdn.net/cnnews/article/details/135330200
gstreamer cmd 
【代码】gstreamer cmd。 
            发布博客?2024.01.01?·
           334?阅读?·

文章来源:https://blog.csdn.net/cnnews/article/details/135599307
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。