zl程序教程

您现在的位置是:首页 >  工具

当前栏目

bs4学习

学习 bs4
2023-06-13 09:12:59 时间

爬虫的数据解析包括正则,bs4,xpath,现在学习到了bs4,但是还是有点糊涂,现在根据网上的一些资料深入学习一下。

首先,要安装环境,在终端terminal输入:

pip3 install Beautifulsoup4

pip install lxml

按下回车即可,顺便要安装lxml,其实系统也有自带的解析器,但是bs4自带的解析器lxml更有优势。

使用的时候输入以下就可以导入模块

from bs4 import BeautifulSoup

为了搞清楚标签和属性定位,我截取了一段html的文本来学习他们的用法。

from bs4 import BeautifulSoup

# 截取的用于测试的html文本
html_text = """
<div class="nav-items">
            <ul>
                <li><a href="https://movie.douban.com/cinema/nowplaying/"
                >影讯&购票</a>
                </li>
                <li><a href="https://movie.douban.com/explore"
                >选电影</a>
                </li>
                <li><a href="https://movie.douban.com/tv/"
                >电视剧</a>
"""
soup = BeautifulSoup(html_text, "lxml")
print(soup.find("a"))
#<a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>
print(soup.find("li"))
# <li><a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>
# </li>
print(soup.find("a").text)  #影讯&购票
print(soup.find("li").text)  #影讯&购票
print(soup.find("ul"))
""" <ul>
<li><a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>
</li>
<li><a href="https://movie.douban.com/explore">选电影</a>
</li>
<li><a href="https://movie.douban.com/tv/">电视剧</a>
</li></ul>"""
print(soup.ul)
# 结果同上

# 再放一次方便对照看结果
html_text = """
<div class="nav-items">
            <ul>
                <li><a href="https://movie.douban.com/cinema/nowplaying/"
                >影讯&购票</a>
                </li>
                <li><a href="https://movie.douban.com/explore"
                >选电影</a>
                </li>
                <li><a href="https://movie.douban.com/tv/"
                >电视剧</a>
"""

soup = BeautifulSoup(html_text, "lxml")
print(soup.a)  #打印出第一次a标签出现的信息
# <a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>
print(soup.a.text)  #影讯&购票
print(soup.a.string)  #影讯&购票  只打印标签下的直系内容
print(soup.a.string)  #影讯&购票
print(soup.a["href"]) #https://movie.douban.com/cinema/nowplaying/
print("---------select---------\n")
print(soup.select(".nav-items"))  # 返回的一定是列表
print(soup.select(".nav-items > ul"))
print(soup.select(".nav-items > ul > li > a"))  #返回所有有a标签的列表
""" [<a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>,
 <a href="https://movie.douban.com/explore">选电影</a>,
 <a href="https://movie.douban.com/tv/">电视剧</a>]
"""

html_text = """
<div class="nav-items">
            <ul>
                <li><a href="https://movie.douban.com/cinema/nowplaying/"
                >影讯&购票</a>
                </li>
                <li><a href="https://movie.douban.com/explore"
                >选电影</a>
                </li>
                <li><a href="https://movie.douban.com/tv/"
                >电视剧</a>
"""

soup = BeautifulSoup(html_text, "lxml")
print(soup.select(".nav-items > ul > li > a")[0]) #返回列表中的第一条
#<a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>
print(soup.select(".nav-items > ul > li > a")[0].text)  #影讯&购票 
print(soup.select(".nav-items > ul > li > a")[0].get_text())  #影讯&购票
print(soup.select(".nav-items > ul > li > a")[0].string)  #影讯&购票
print(soup.select(".nav-items > ul > li > a")[0]["href"]) # 打印href中内容
#https://movie.douban.com/cinema/nowplaying/
print(soup.select(".nav-items > ul a"))  
"""[<a href="https://movie.douban.com/cinema/nowplaying/">影讯&amp;购票</a>, 
 <a href="https://movie.douban.com/explore">选电影</a>, 
 <a href="https://movie.douban.com/tv/">电视剧</a>]

嗯感觉更加理解了一丢丢,现在要继续往下学了,希望能早日学会爬虫,然后再学习点其他的东西,可能要开始学习html了 吧!唉,越学发现自己越无知是真的,我还想学习Django,面对着未知的东西又十分的渴望,比如Java,c++,numpy, panda之类的,好希望有一天能够都掌握,但还是慢慢来吧...