美文网首页
BeautifulSoup的基本使用语法规则12-02

BeautifulSoup的基本使用语法规则12-02

作者: 张文超ai | 来源:发表于2018-12-02 18:31 被阅读0次
    soup = BeautifulSoup(html, 'lxml')  # 初始化BeautifulSoup
    

    初始化BeautifuSoup的参数。

    第一个参数 html是网页的源代码,可以是个Unicode字符串,也可以是一个二进制字符串
    (如果第一个参数是字符串并且网页自带了charset信息,BS会默认采用网页的默认编码解码,
    否则默认以你当前文件执行的编码(通常是utf-8)进行解析。如果是二进制字符串,
    如果自己手动指定了编码,就以指定编码解析,否则默认utf-8解析)。
    第二个参数 lxml是BeautifulSoup采用的网页解析器,我们安装lxml用处就在这体现出来了。
    如果不指定,那么默认会采用Python内置的html.parser进行解析。

    BeautifulSoup的基本使用语法规则

    .find() 使用示例
    soup.find('a')。那么会返回在soup包含的源代码中的第一个<a>...</a>标签内容对象。
    soup.find('a', id='next')。那么会返回在soup包含的源代码中,遇到的第一个有属性为id,值为next的<a>对象,比如<a id="next">...</a>。(不只可以用id,大部分其他的属性都可以直接使用,比如src、name。 **值得注意的是,class这个属性因为是Python关键字,不能直接使用,所以在BS里面,使用class_='...'进行代替 **)
    find返回的结果,依然可以继续使用find()或者find_all()方法。如果找不到指定的内容,find会返回None。

    .find_all()使用示例
    soup.find_all('a')。那么会返回在soup包含的源代码中,遇到的所有<a>...</a>标签内容的可迭代对象(我们可以把它看成一个 list 或者数组)。
    soup.find_all('a', class_='next')。那么会返回在soup包含的源代码中,遇到的所有属性为class,值为next的<a>的 可迭代对象,比如<a class="next">...</a>。(语法和find也一样,class也不能直接写)
    find_all返回的“list”中的单个对象 依然可以继续使用find()或者find_all()方法。如果找不到指定的内容,find_all会返回一个空的“list”。

    获取元素的某个属性
    soup['src],这样我们就能取出soup对象的src属性了。如果该属性不存在,那么程序会报错。

    获取元素中的所有文本
    ** soup.text**,假设soup对象为<div>你好<a>复联</a></div>,那么这个操作返回字符串是你好复联。

    爬取https://movie.douban.com/cinema/later/chengdu/电影信息代码

    import requests
    from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup
     
    #请求网页
    url = "https://movie.douban.com/cinema/later/chengdu/"
    response = requests.get(url)
     
    # 解析网页
    # 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页
    soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')
    # 初始化BeautifulSoup方法二:手动指定解析编码解析网页
    # soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')
     
    # print(soup)  # 输出BeautifulSoup转换后的内容
    all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div
    # print(all_movies)  # 输出最大的div的内容
    for each_movie in all_movies.find_all('div', class_="item"):  # 从最大的div里面找到影片的div
        # print(each_movie)  # 输出每个影片div的内容
        all_a_tag = each_movie.find_all('a')
        all_li_tag = each_movie.find_all('li')
        movie_name = all_a_tag[1].text
        moive_href = all_a_tag[1]['href']
        movie_date = all_li_tag[0].text
        movie_type = all_li_tag[1].text
        movie_area = all_li_tag[2].text
        movie_lovers = all_li_tag[3].text
        print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
            movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))
    

    https://1024dada.com/python/q/152550

    相关文章

      网友评论

          本文标题:BeautifulSoup的基本使用语法规则12-02

          本文链接:https://www.haomeiwen.com/subject/tnfscqtx.html