python 爬虫——Beautifulsoup 模块

Beautifulsoup:可以从HTML或XML文件中提取数据的Python库。

beautifulsoup 是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。

1、导入模块

from bs4 import BeautifulSoup

2、Beautifulsoup 使用

在这之前可以先了解一下 Beautifulsoup 解析器,这里解析器使用 python 的内置标准库——

html.parser

soup = BeautifulSoup(解析内容, 解析器)

soup = BeautifulSoup(r.content, 'html.parser')

2.1 标签名查找

使用标签名来获取结点:

  • soup.标签名

使用标签名来获取结点标签名:

  • soup.标签.name(name——主要用于非标签名式筛选时,获取结果的标签名)

使用标签名来获取结点属性:

  • soup.标签.attrs(获取全部属性)
  • soup.标签.attrs[属性名](获取指定属性)
  • soup.标签[属性名](获取指定属性)
  • soup.标签.get(属性名)

使用标签名来获取结点的文本内容:

  • soup.标签.text
  • soup.标签.string
  • soup.标签.get_text()

嵌套方法:

  • soup.ul.li(ul标签下的li标签)
from bs4 import BeautifulSoup

html = """

    
        
        BeautifulSoup
    
    
        
123

456

999

000 """ soup = BeautifulSoup(html, 'html.parser') # 获取结点 print("-------------------获取结点--------------------") print(soup.head) # 获取head标签——BeautifulSoup print(soup.p) # 返回第一个p标签——

456

# 获取结点名 print("-------------------获取结点名-------------------") print(soup.head.name) # head # 获取文本内容 print("-------------------获取文本内容-----------------") print(soup.title.string) # 返回title的内容——BeautifulSoup print(soup.title.text) # 返回title的内容——BeautifulSoup print(soup.title.get_text()) # 返回title的内容——BeautifulSoup # 获取属性 print("-------------------获取属性--------------------") print(soup.p.attrs) # 以字典形式返回标签内容——{'class': ['two']} print(soup.p.attrs['class']) # 以列表形式返回标签的值——['two'] print(soup.p['class']) # 以列表形式返回标签的值——['two'] t = soup.title print(t.text) # BeautifulSoup print(type(t)) # print(t.name) # title # 嵌套选择 print(soup.head.title.string) # BeautifulSoup

2.2 find\find_all查找

soup = BeautifulSoup(r.content, 'html.parser')
data_list = soup.find('div', class_='zbgg_table').find_all('tr')
for data in data_list:
    url = data.find_all('div', class_='list-content-between')[0].find('a')['href']
    Title = data.find_all('div', class_='list-content-between')[0].find('a')['title']
    BTypeName = (data.find_all('div', class_='list-content-between')[0].find('a')
                                 .find('font').get_text()[1:-1])
    PubDate = (data.find_all('div', class_='list-content-between')[0]
                               .find('span', class_='list-content-end').get_text()).strip()

find:根据参数找对应的标签,但只返回第一个符合条件的结果。

find_all:根据参数来找对应的标签,返回所有符合条件的结果。

2.3 select筛选——select使用CSS选择规则

soup.select('标签名')——根据标签来筛选出指定标签。

soup.select('#xxxx')——根据id筛选出指定标签,返回值是一个列表。

soup.select('.xxxx')——根据class筛选出指定标签,返回值也是一个列表。

soup.select('#xxxx .xxxx')——id下的class的标签,返回值也是一个列表,例如:

soup.select('.class1 #id2')就是class=class1标签下id=id2的标签

你可能感兴趣的:(python,python,爬虫,开发语言)