通过shng我们已经可以获得页面的html,接下来我们通过html.parser和BeautifulSoup库来解析html.实验环境ipython3
import requests
from bs4 import BeautifulSoup
r=requests.get("http://python123.io/ws/demo.html")
r.status_code
r.text
demo=r.text
soup=(demo,'html.parser')
print(soup.a)
print(soup.p)
我们可以通过html.parser,来将页面熬成一锅soup,然后我们就可以直接通过soup.Tag来访问具体的标签。我们可以通过soup.Tag.string来得到标签内的字符。通过soup.Tag.attrs可以访问标签的属性。我们可以通过soup.Tag.comment来查看标签的注释。我们可以通过soup.contents得到和soup一样的内容,soup.contents得到的是一个列表。其实.contents指的是所有的儿子节点,可以通过soup.head.contents来查看所有的head的儿子节点。soup.body.contents可以得到所有的主体的内容,其中,\n也算作其中的一个元素,可以通过soup.body.contents[2]来访问得到。我们还可以通过soup.body.children来得到儿子节点,不过soup.body.children得到的是迭代器,我们要通过for children in soup.body.children
来访问。我们还可以通过soup.a.parent得到它父亲节点的标签,得到的也是一个列表我们可以通过soup.a.parent[3]来访问。同样的我们也可以通过soup.a.parents来访问,得到的是一个迭代器。这是树的上行和下行遍历,同样的我们还有平行遍历,使用soup.a.next_sibling soup.a.previous_sibling得到得是标签的列表。而soup.a.next_siblings和soup.a.previous_siblings得到的是一个迭代器要通过for循环来访问得到其中的值。
当我们通过r.text得到的html是一盘散沙,
我们可以通过bs4库的pretty来组织一下,如图。
同样的pretty标签也可以使用于单个的标签组织,比如soup.a.pretty()
import requests
from bs4 import BeautifulSoup
r= requests.gets("http://python123.io/ws/demo.html")
r= requests.get("http://python123.io/ws/demo.html")
log
get_ipython().magic('logstart')
r= requests.get("http://python123.io/ws/demo.html")
r.status_encode
r.status_code
r.text
demo=r.text
soup =BeautifulSoup(demo,'html.parser')
print(soup.prettify())
print(soup.a)
print(soup.a)
print(soup.p)
print(soup.p.name)
print(soup.p.string)
print(soup.a.string)
print(soup.a.attr)
print(soup.a.attrs)
print(soup.a)
soup.head.contents
soup.head
soup
soup.body.contents
soup.body.contents[2]
soup.body.children
soup.body.parents
soup.body.parent
soup.body.childrens
type(soup.body.childrens)
type(soup.body.children)
soup.a.parents
soup.a.parent
quit()