- 环境安装,导入模块
- pip install bs4
- pip install lxml #需要用到lxml解析
- from bs4 import Beautifulsoup
- 实例化一个BeautifulSoup的对象,然后把即将被解析的页面源码数据加载到该对象中
- 本地文件:BeautifulSoup(fp,'lxml')
- 网络请求页面:BeautifulSoup(page_text,'lxml')
- 调用BeautifulSoup对象中相关的属性和方法实现标签定位和数据提取
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>测试bs4</title>
</head>
<body>
<div>
<p>百里守约</p>
</div>
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" title="赵匡胤" target="_self">
<span>this is span</span>
宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
<img src="http://www.baidu.com/meinv.jpg" alt="" />
</div>
<div class="tang">
<ul>
<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
<li><a href="http://www.sina.com" class="du">杜甫</a></li>
<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
<li><b>杜小月</b></li>
<li><i>度蜜月</i></li>
<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
</ul>
</div>
</body>
</html>
from bs4 import BeautifulSoup
#fp就表示本地存储的一个html文件
fp = open('./test.html','r',encoding='utf-8')
#解析本地存储的html文件中的内容
#实例化BeautifulSoup对象,然后把即将被解析的页面源码数据加载到了该对象中
soup = BeautifulSoup(fp,'lxml') #参数2,lxml是固定形式,表示指定的解析器
#标签定位
#方式1:soup.tagName,只会定位到符合条件的第一个标签
tag1 = soup.title #定位到了title标签
tag2 = soup.div
#方式2:属性定位,find函数,findall函数
#find('tagName',attrName='attrValue'):find只会定位到满足要的第一个标签
tag3 = soup.find('div',class_='song')#定位class属性值为song的div标签
tag4 = soup.find('a',id='feng')#定位id属性值为feng的a标签
#findAll('tagName',attrName='attrValue'):可以定位到满足要求的所有标签
tag5 = soup.findAll('div',class_='song')
#方式3:选择器定位:soup.select('选择器')
#id选择器:#feng ----id为feng
#class选择器:.song ----class为song
#层级选择器:大于号表示一个层级,空格表示多个层级
tag6 = soup.select('#feng') #定位到所有id属性值为feng的标签
tag7 = soup.select('.song')#定位到所有class属性值为song的标签
tag8 = soup.select('.tang > ul > li') #定位到了class为tang下面的ul下面所有的li标签
tag9 = soup.select('.tang li')
#提取标签中的内容
#1.提取标签中间的内容:
#tag.string:只可以提取到标签中直系的文本内容
#tag.text:可以提取到标签中所有的文本内容
# p_tag = soup.p
# print(p_tag.string)
# print(p_tag.text)
# div_tag = soup.find('div',class_='song')
# print(div_tag.text)
#2.提取标签的属性值
#tag['attrName']
img_tag = soup.img
print(img_tag['src']) #提取img标签的src的属性值
from bs4 import BeautifulSoup
import requests,time
url = 'https://www.kuaidaili.com/free/inha/%d/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'
}
for i in range(1,6):
new_url = format(url%i) #注意:这里一定要使用一个新变量接收url,不能直接修改url
print('----正在下载第%d页数据----'%i)
response = requests.get(url = new_url,headers = headers)
page_text = response.text
time.sleep(1)
#解析数据
soup = BeautifulSoup(page_text,'lxml')
tr_list = soup.select('#list > table > tbody > tr')
# print(tr_list)
for tr in tr_list:
t1 = tr.findAll('td')[0]
t2 = tr.findAll('td')[1]
ip = t1.string
port = t2.string
print(ip,port)