首先看下面几行代码:
import requests
from bs4 import BeautifulSoup as bs
content = requests.get('https://book.douban.com/').text
soup = bs(content, 'lxml')
soup.
这里soup后面可以跟各种方法。下面主要介绍实用的方法。
- name:获取Tag的名称
- string:获取Tag的内容
- attrs:获取Tag的所有属性。一个Tag之中可能包含多个属性,例如id、class等等,此时我们需要获取所有的属性。
- attrs后面可以跟列表,例如attrs[‘li’]
- contents:获取Tag的所有子节点,返回一个list
- children:获取Tag的所有子节点,返回一个生成器
- descendants:获取Tag的所有子孙节点
- strings:如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历
- parent:获取Tag的父节点
- parents:递归得到父辈元素的所有节点,返回一个生成器
- previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,真实结果是当前标签与上一个标签之间的顿号和换行符
- next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,真是结果是当前标签与下一个标签之间的顿号与换行符
- previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器
- next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器
- next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,但通常是不一样的
- previous_elements:返回一个生成器,可以向前访问文档的解析内容
- next_elements:返回一个生成器,可以向后访问文档的解析内容
- has_attr:判断Tag是否包含属性
过滤器find_all
import requests
from bs4 import BeautifulSoup as bs
content = requests.get('https://book.douban.com/').text
soup = bs(content, 'lxml')
soup.find_all('ul')
soup.find_all(id='***')
soup.find_all(class_='***')
soup.find_all(text='***') # text方法:匹配文本内容
过滤器find
与find_all不同之处是只获取一个内容。
CSS选择器
import requests
from bs4 import BeautifulSoup as bs
content = requests.get('https://book.douban.com/').text
soup = bs(content, 'lxml')
soup.selecte(.div #id)
soup.selecte('ul li')
soup.selecte('ul'[0])