可以通过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)
findAll({"h1","h2","h3","h4","h5","h6"})
属性参数 attributes 是用一个 Python 字典封装一个标签的若干属性和对应的属性值。例 如,下面这个函数会返回 HTML 文档里红色与绿色两种颜色的 span 标签:
findAll("span", {"class":{"green", "red"}})
如果 recursive 设置为 True,findAll 就会根据你的要求去查找标签参数的所有子标签,以及子 标签的子标签。如果 recursive 设置为 False,findAll 就只查找文档的一级标签。findAll 默认是支持递归查找的(recursive 默认值是 True);一般情况下这个参数不需要设置,除 非你真正了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数。
它是用标签的文本内容去匹配,而不是用标签的属性。
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())