聚焦爬虫
编码流程:
1.指定url
2.发起请求
3.获取响应数据
4.数据解析
5.持久化存储
数据解析分类:
- 正则
- bs4
- xpath:重点,通用性比较强
数据解析概念:
解析的局部的文本内容都会在标签之间或者标签对应的属性中存储
1.进行指定标签的定位
2.标签或者标签对应的属性中存储的数据值进行提取(解析)
bs4进行数据解析:
bs4是Python自带的,所以只能在Python中使用。
环境安装:pip install bs4, pip install lxml
- 实例化一个BeautifulSoup对象,并将页面源码数据加载到该对象中
- 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取。
- 实例化方法:
- 将本地的html文档中的数据加载到该对象中:
fp = open('./test.html', 'r', enconding='utf-8')
soup = BeautifulSoup(fp, 'lxml')
- 将互联网上获取的页面源码加载到该对象中:
page_text = response.text
soup = BeauidulSoup(page_text, 'lxml')
4.bs4相关方法操作:
提供的属性或者方法:
- soup.tagname:返回的是文档中第一次出现的tagname对应的标签(单数)
- soup.find():
- 相当于soup.tagname, find(‘tagname’)
- 属性定位:soup.find(‘div’, class_=‘song’),即找到属性为’song’的’div’所对应的信息(也是单数)
- soup.find_all(‘tagname’): 返回复数(列表),所有的符合条件的标签。
- soup.select():是一种选择器。可以是(id,class,标签,层级)
- 层级举例: print(soup.select(’.tang > ul > li > a’)[0])
print(soup.select(’.tang > ul a’)[0]) (注意这个点!!!)
‘>’: 表示的是大一个层级
’ ': 空格表示大多个层级
- 层级举例: print(soup.select(’.tang > ul > li > a’)[0])
- 获取标签之间的文本数据:
- soup.a.text/string/get_text()
- text/get_text():可以获取一个标签中所有的文本内容
- string:只可以获取该标签下直系的文本内容
- soup.a.text/string/get_text()
- 获取标签中属性值:
- soup.a[‘属性名称’]