Python简单爬虫第三蛋!

第三讲:

  今天我们来介绍一个新模块,Beautiful Soup!

  这个模块有许多神奇的功能,首先,我们不将它怎么神奇,先把它安装好,才能体现出它神奇的功能。

  安装如下:

  Win10系统下运行cmd(命令提示符)

  敲入pip install beautifulsoup4

  就可以进行安装了。这里省去安装的一些具体细节,我们把目光集中在它神奇的功能上!

 1 '''加入新模块'''
 2 
 3 import requests
 4 
 5 from bs4 import BeautifulSoup
 6 
 7  
 8 
 9 def getHTML_Text(url):
10 
11     try:
12 
13         r = requests.get(url)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return '产生异常'
24 
25  
26 
27 if __name__ == '__main__':
28 
29     url = 'https://www.hao123.com/'
30 
31     print(getHTML_Text(url)[:5000])

  这是我们上期的通用代码,经过简单修改之后,运行:

  得到一串字符串,前面提到过,这里面包含了我们需要的信息(参考第二讲的实例1),而我们今天要做的就是把他们提取出来。BeautifulSoup模块的神奇功能不言而喻了。

  废话不多说,我们先大概了解一些beautifulsoup的基本运用。

1 from bs4 import BeautifulSoup
2 soup = BeautifulSoup(‘<p>data</p>’,’html.parser’)

  <p>data</p>是一段字符串,代指…

  也就是我们上两讲所提及到的,把网页爬取下来的text内容,

  html.parser 是一个解析器,用与解析HTML Document

  通过上面的代码,可以建立一棵标签树,对应着HTML文档的全部内容,这样建立之后,更方便我们查找到所需的内容。

  BeautifulSoup类的基本元素

基本元素

说明

Tag

标签,最基本的信息组织单元,<>和</>标明开头结尾

Name

标签的名字,格式<tag>.name

Attributes

标签的属性,以字典形式组织,格式:<tag>.attrs

Navigable String

标签内非属性字符串,<>…</>中字符串,格式:<tag>.string

Comment

标签内字符串的注释部分

  让我们来一一展示一下:

 1 '''BeautifulSoup演示'''
 2 
 3 import requests
 4 
 5 from bs4 import BeautifulSoup
 6 
 7  
 8 
 9 def getHTML_Text(url):
10 
11     try:
12 
13         r = requests.get(url)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return '产生异常'
24 
25  
26 
27 if __name__ == '__main__':
28 
29     url = 'https://www.hao123.com/'
30 
31     soup = BeautifulSoup(getHTML_Text(url),'html.parser')
32 
33     title = soup.title
34 
35     tag = soup.a
36 
37     print(title.string)
38 
39     print(str(tag.name))
40 
41     print(str(tag.attrs))
42 
43     print(str(tag.string))
44 
45     print(str(tag.comment))

  运行结果:

  首先打印出整个HTML的title标签的内容

  在获取了第一个a标签之后,分别打印出标签名、标签属性、标签内容、标签注释部分。

 

  大体上就是这些用途,还有更多有意思的功能大家自己发掘,这里只是简单提到。

  这里还介绍一个prettify()方法,让我们的显示更友好。

  例如:

 1 '''BeautifulSoup演示'''
 2 
 3 import requests
 4 
 5 from bs4 import BeautifulSoup
 6 
 7  
 8 
 9 def getHTML_Text(url):
10 
11     try:
12 
13         r = requests.get(url)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return '产生异常'
24 
25  
26 
27 if __name__ == '__main__':
28 
29     url = 'https://www.hao123.com/'
30 
31     soup = BeautifulSoup(getHTML_Text(url),'html.parser')
32 
33     print(soup.prettify()[:5000])

  结果如上图,显示出比较友好的文本形式了,否则直接打印的话,密麻麻的字符串,看得确实让人头疼。

  最后小小展示一些BeautifulSoup的一个有用的方法,具体的下期再详细讲,看代码!

 1 '''BeautifulSoup演示'''
 2 
 3 import requests
 4 
 5 from bs4 import BeautifulSoup
 6 
 7  
 8 
 9 def getHTML_Text(url):
10 
11     try:
12 
13         r = requests.get(url)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return '产生异常'
24 
25  
26 
27 if __name__ == '__main__':
28 
29     url = 'https://www.hao123.com/'
30 
31     soup = BeautifulSoup(getHTML_Text(url),'html.parser')
32 
33     for link in soup.find_all('a'):
34 
35         print(link.get('href'))

  已经获取到所有<a>标签的url连接了,是不是很强大?

  你问这个有什么用?啊哈?有什么用呢,下期继续讲。

  今天到此结束,谢谢。

猜你喜欢

转载自www.cnblogs.com/shuaiqi-XCJ/p/8987214.html