网络爬虫(五)
2019-05-11 本文已影响0人
zhangxiaohao
对网页进行数据解析的原理主要有两点:
1.进行标签定位。
2.提取标签间数据,或提取标签属性中的数据。
bs4数据解释过程:
- 实例化一个BeautifulSoup对象,并将页面源码文本加载到该对象。
- 通过过调用BeutifulSoup对象的方法与属性方法进行定位和数据提取。
安装bs4相关的模块
pip install bs4
pip install lxml
调用bs4主要代码有: soup=BeautifulSoup(page_text,'lxml')
page_text就是网页的源码文本
如下代码例子:
import requests
from bs4 import BeautifulSoup
if __name__=='__main__':
url='https://travel.163.com/19/0511/01/EES1RQ9O00068AIR.html'
# 设置user-agent用字典的形式
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}
res=requests.get(url=url,headers=headers)
page_text=res.text
soup=BeautifulSoup(page_text,'lxml')
print(soup.a)
BeutifulSoup对象主要有以下方法与属性
- 生成BeutifulSoup对象:soup=BeautifulSoup(page_text,'lxml')
- find: soup.find('div') #取第一次出现div标签。,其他形式:soup.find('div',class_='classname')
- findall: soup.findall('div') #取全部div标签。,其他形式:soup.findall('div',class_='classname')
- select:
soup.select('.classname') #前面有“.”表示选中所有类名为classname的标签,生成列表。
select(' .classname>ul>li>a') # “>”表示直系层级,这个语句表示选中在类名为classname下ul下li下的全为a全部子标签。
select(' .classname>ul a') #空格表示多个层级,这个语句表示选中类名为classname的标签下ul下子子孙孙标签为a的所有标签。 -
属性:
soup.a['href'] #取标签属性,这里取标签a的href属性。 夏天需看的图
soup.a.text #取得标签下所有文本与soup.a.get_text()相似。这是取a标签间及子子孙孙标签间文本。
soup.a.string #取得标签直系文本