爬虫的数据解析包括正则,bs4,xpath,现在学习到了bs4,但是还是有点糊涂,现在根据网上的一些资料深入学习一下。
首先,要安装环境,在终端terminal输入:
pip3 install Beautifulsoup4
pip install lxml
按下回车即可,顺便要安装lxml,其实系统也有自带的解析器,但是bs4自带的解析器lxml更有优势。
使用的时候输入以下就可以导入模块
代码语言:javascript复制from bs4 import BeautifulSoup
为了搞清楚标签和属性定位,我截取了一段html的文本来学习他们的用法。
代码语言:javascript复制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/">影讯&购票</a>
print(soup.find("li"))
# <li><a href="https://movie.douban.com/cinema/nowplaying/">影讯&购票</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/">影讯&购票</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/">影讯&购票</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/">影讯&购票</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/">影讯&购票</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/">影讯&购票</a>,
<a href="https://movie.douban.com/explore">选电影</a>,
<a href="https://movie.douban.com/tv/">电视剧</a>]
嗯感觉更加理解了一丢丢,现在要继续往下学了,希望能早日学会爬虫,然后再学习点其他的东西,可能要开始学习html了 吧!唉,越学发现自己越无知是真的,我还想学习Django,面对着未知的东西又十分的渴望,比如Java,c ,numpy, panda之类的,好希望有一天能够都掌握,但还是慢慢来吧...