Fork me on GitHub

Python网络爬虫与信息提取(二):网络爬虫之提取



Beautiful Soup库可对HTML/XML格式进行解析并提取相关信息

安装: pip install beautifulsoup4

小测:

1
2
3
4
5
6
7
>>> import requests
>>> r = requests.get("http://python123.io/ws/demo.html")
>>> r.text
>>> demo = r.text
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo,"html.parser")
>>> print(soup.prettify())

这里写图片描述

这里写图片描述

Beautiful Soup库是解析/遍历/维护”标签熟”的功能库,引用方式:

1
2
from bs4 import BeautifulSoup
import bs4

Beautiful Soup库的4种解析器:

这里写图片描述

Beautiful Soup类的基本元素:

这里写图片描述

bs类基本元素

  • Tag标签
    这里写图片描述
    任何存在于HTML语法中的标签都可用**soup.访问获得,存在多个取第一个

  • Tag的name
    这里写图片描述
    每个有自己的名字,通过.name获取,字符串类型

  • Tag的attrs
    这里写图片描述

  • Tag的NavigableString
    这里写图片描述

  • Tag的Comment
    这里写图片描述

  • 由find_all()扩展的七个方法:
    这里写图片描述

实例一:中国大学排名爬虫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python
# coding=utf-8
import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "error"

def fillUnivList(ulist,html):
soup=BeautifulSoup(html,"html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string,tds[1].string,tds[2].string])

def printUnivList(ulist,num):
tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplt.format("排名","学校名称","总分",chr(12288)))
for i in range(num):
u=ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))

def main():
uinfo=[]
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,20)
main()


坚持原创技术分享,您的支持将鼓励我继续创作
-------------本文结束感谢您的阅读-------------
0%