使用BeautifulSoup解析HTML

  1.  通过css属性来获取对应的标签,如下面两个标签
        

可以通过class属性抓取网页上所有的红色文字,具体代码如下:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("span", {"class": "green"})
for name in nameList:
    print(name.get_text()

2. get_text()方法解析

    .get_text() 会把你正在处理的 HTML 文档中所有的标签都清除,然后返回 一个只包含文字的字符串。假如你正在处理一个包含许多超链接、段落和标 签的大段源代码,那么 .get_text() 会把这些超链接、段落和标签都清除掉, 只剩下一串不带标签的文字。

3. find()和findAll() 

findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)

  •     tag参数:
 你可以传一个标签的名称或多个标签名称组成的 Python 列表做标签参数。例如,下面的代码将返回一个包含 HTML 文档中所有标题标签的列表:

    findAll({"h1","h2","h3","h4","h5","h6"})

  •     artibutes参数:    

属性参数 attributes 是用一个 Python 字典封装一个标签的若干属性和对应的属性值。例 如,下面这个函数会返回 HTML 文档里红色与绿色两种颜色的 span 标签:

    findAll("span", {"class":{"green", "red"}})

  • 递归参数 recursive :

如果 recursive 设置为 True,findAll 就会根据你的要求去查找标签参数的所有子标签,以及子 标签的子标签。如果 recursive 设置为 False,findAll 就只查找文档的一级标签。findAll 默认是支持递归查找的(recursive 默认值是 True);一般情况下这个参数不需要设置,除 非你真正了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数。

  •   文本参数text:

它是用标签的文本内容去匹配,而不是用标签的属性。


3. 导航树

findAll 函数通过标签的名称和属性来查找标签 ,导航树是通过纵向或横向导航来查找标签。

  • 处理子标签和其他后代标签

如果你只想找出子标签,可以用 .children 标签:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
 
html = urlopen("http://www.pythonscraping.com/pages/page3.html") 
bsObj = BeautifulSoup(html) 
 
for child in bsObj.find("table",{"id":"giftList"}).children:  
   print(child)

  • 处理兄弟标签:

BeautifulSoup 的 next_siblings() 函数可以让收集表格数据成为简单的事情,尤其是处理 带标题行的表格:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("http://www.pythonscraping.com/pages/page3.html") 

bsObj = BeautifulSoup(html)  
for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:、
     print(sibling)

  • 处理父标签
from urllib.request import urlopen 
from bs4 import BeautifulSoup 
 
html = urlopen("http://www.pythonscraping.com/pages/page3.html") 
bsObj = BeautifulSoup(html) 
print(bsObj.find("img",{"src":"../img/gifts/img1.jpg" }).parent.previous_sibling.get_text())


你可能感兴趣的:(python数据采集)