bs4、lxml、xpath、正则
写在前面
bs4官方文档
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
安装bs4
pip install bs4
安装lxml
pip install lxml
1、bs4语法
1.1、soup=BeautifulSoup(html)
soup=BeautifulSoup(html)
也可以解析一个html文件
soup = BeautifulSoup(open('soup.html', encoding='utf8'))
1.2、soup.prettify()
按照html格式输出
soup.prettify()
1.3、soup.title
soup.标签名 ,可以直接获取该标签的内容
soup.a.attrs 返回一字典,里面是所有属性和值
soup.a['href'] 获取href属性
soup.a.string
soup.a.text
soup.a.get_text() 【注】当标签里面还有标签的时候,string获取的为None
1.4、soup.find(‘a’)
soup.find('a')
soup.find('a', class_='xxx')
soup.find('a', title='xxx')
soup.find('a', id='xxx')
soup.find('a', id=re.compile(r'xxx'))
【注】find只能找到符合要求的第一个标签,他返回的是一个对象
find_al、返回一个列表,列表里面是所有的符合要求的对象
soup.find_all('a')
soup.find_all('a', class_='wang')
soup.find_all('a', id=re.compile(r'xxx'))
soup.find_all('a', limit=2) 提取出前两个符合要求的a
1.5、select选择器
ret = soup.select('a')
ret = soup.select('#muxiong')
print(ret[0]['title'])
ret = soup.select('.wang')
print(ret)
ret = soup.select('div > a')
print(ret)
ret = soup.select('a[title=东坡肉]')
print(ret)
odiv = soup.select('.tang')[0]
ret = odiv.select('a')
常用的选择器
标签选择器、id选择器、类选择器
层级选择器**
div h1 a 后面的是前面的子节点即可
div > h1 > a 后面的必须是前面的直接子节点
属性选择器
input[name=‘hehe’]
select(‘选择器的’)
【注】返回的是一个列表,列表里面都是对象
【注】find find_all select不仅适用于soup对象,还适用于其他的子对象,如果调用子对象的select方法,那么就是从这个子对象里面去找符合这个选择器的标签
2、lxml使用
lxml只是一个解析文档的引擎,bs4用的时候语法无差异
lxml的特点是,它是c语言的,运行比较快
3、xpath语法
xpath教程
https://www.w3school.com.cn/xpath/index.asp
4、正则语法
正则教程:
https://www.runoob.com/python/python-reg-expressions.html
python正则:
re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败
re.search 匹配整个字符串,直到找到一个匹配。
re.sub 用于替换字符串中的匹配项。
re.compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
re.finditer 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.split 方法按照能够匹配的子串将字符串分割后返回列表