一、 搞清楚数据的编码
python3中统一使用Unicode编码,用4字节表示一个字符,而网络中的数据包用utf-8编码,所以需要进行编码转化
编码转化
二、 urllib 模块:处理http请求的模块
专门处理http套接字,可以像处理文件一样处理网页
from urllib import urlopen #ps:关于import和from xxx import xxx
url='xxx'
fhand = urlopen(url).read() #返回句柄
三、beautifulsoup:用这碗美味的汤来解析网页
from bs4 import BeautifulSoup
soup = BeautifulSoup(fhand,'html.parser')
四大对象种类
其中soup是html转化后的树形文档,其每个节点都是python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment
1. Tag
和html原生文档中标签相同
- name属性获取Tag名称
- 获取某个标签中内容:soup.xxx
soup.a
- 获取某个标签中某个属性: soup.xxx['yyy'] (使用字典)
soup.p['class']
- 获取子节点
way1:使用tag的name属性多次调用
tag = soup.article.div.ul.li
way2:使用.contents属性返回该tag下子节点列表
tag.contents
way3:使用.children生成器遍历所有子节点 - 获取父节点
way1: 使用.parent获取父节点
way2: 使用.parents 属性遍历所有的父辈节点
tag = soup.article
for p in tag.parents:
print p.name
- 获取兄弟节点
使用.next_sibling .previous_sibling 属性
2. NavigableString
获得标签内的可遍历字符串
soup.p.string
3. BeautifulSoup
BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag
4. Comment
处理html种注释
文档树搜索
- find(name , attrs , recursive , string , ** kwargs)
只返回第一个满足条件的元素 - find_all(name , attrs , recursive , string , ** kwargs)
指定name搜索:find_all('a')
指定属性搜索:find_all(class='xxx')
CSS选择器
soup.select('标签名')
常用:
find寻找第一个满足条件的情况
find_all返回一个列表
find('xxx',attrs='xxx')如:find('div', class_='result')找到class为result的第一个div
网友评论