省住房和城乡建设厅网站,网站建设好找工作,上海做网站建设的公司,上海川沙网站建设目录
1.bs4的安装
2.bs4的语法
#xff08;1#xff09;查找节点 #xff08;2#xff09;查找结点信息
3.bs4的操作
#xff08;1#xff09;对本地文件进行操作
#xff08;2#xff09;对服务器响应文件进行操作
4.实战 beautifulsoup#xff1a;和lxml一样…目录
1.bs4的安装
2.bs4的语法
1查找节点 2查找结点信息
3.bs4的操作
1对本地文件进行操作
2对服务器响应文件进行操作
4.实战 beautifulsoup和lxml一样是一个html的解析器主要功能也是解析和提取数据。 优缺点 缺点没有lxml效率高 优点接口更加人性化使用方便 1.bs4的安装 安装pip install bs4 导入 from bs4 import BeautifulSoup 2.bs4的语法
1查找节点 1.根据标签名查找节点 soup.a 【注】只能找到第一个 soup.a.name 标签a的名字即“a” soup.a.attrs 标签a 的属性即“href”..” 2.函数 1.find(返回一个对象) find(‘a’)只找到第一个 a 标签 find(‘a’, title’属性值’) find(‘a’, class’属性值’) 2.find_all (返回一个列表) find_all(a’) 查找到所有的a find_all([aspan]) 返回所有的a和span find_all(alimit2) 只找前两个a 3.select(根选择器得到节点对象)【推荐】 1. element eg:p 2..class eg: .firstname 3.#id eg:#firstname 4.属性选择器 [attribute] 5.层级选择器 ①后代选择器element element div p ②子代选择器elementelement divp ③多项选择器element ,element div,p eg:soup soup.select(a,span) # 根据标签名查找节点
# 注意找到的是第一个符合条件的数据
print(soup.a) # a hrefhttps://... ida1BeautifulSoup/a
# 获取标签名
print(soup.a.name) # a
# 获取标签的属性和属性值
print(soup.a.attrs) # {href: https://..., id: a1}# bs4 的一些函数
# (1)find 返回的是第一个符合条件的对象
print(soup.find(a)) # a hrefhttps://... ida1BeautifulSoup/a
# 根据属性值找到符合条件的标签对象
print(soup.find(a, ida2)) #a hrefhttp://... ida2lxml/a
# 根据class查找标签对象注意class要加下划线class_因为这里的的class和定义类的class冲突了
print(soup.find(a,class_link))# (2)findAll 返回的是所有符合条件的对象的列表
# 找到所有符合条件的标签对象
print(soup.findAll(a)) # [a classlink hrefhttps://... ida1BeautifulSoup/a, a hrefhttp://... ida2lxml/a]
# 获取多个标签需要在 findAll中添加列表的数据
print(soup.findAll([a,span])) # [a classlink hrefhttps://... ida1BeautifulSoup/a, spandemo/span, a hrefhttp://... ida2lxml/a]
# 找前几个符合条件的数据
print(soup.findAll(a,limit1))# (3)select
# select 返回的是所有符合条件的对象列表
print(soup.select(a)) # [a classlink hrefhttps://... ida1BeautifulSoup/a, a hrefhttp://... ida2lxml/a]
# 可以通过 . 代表 class我们把这种操作叫做类选择器
print(soup.select(.link)) # [a classlink hrefhttps://... ida1BeautifulSoup/a]
print(soup.select(#a1)) # [a classlink hrefhttps://... ida1BeautifulSoup/a]# 属性选择器 通过属性来寻找对应的标签
# 查找li标签中有class的标签
print(soup.select(li[class])) # [li classc1 idl1北京/li, li classc2 idl2上海/li]
# 查找li标签中 id 为 l2 的标签
print(soup.select(li[idl2])) # [li classc2 idl2上海/li]# 层级选择器
# 后代选择器
# 找到 div 下面的 li
print(soup.select(div li)) # [li classc1 idl1北京/li, li classc2 idl2上海/li, li ids1广州/li, li ids2深圳/li]
# 子代选择器
# 某标签的第一级子标签
print(soup.select(div ul li)) # [li classc1 idl1北京/li, li classc2 idl2上海/li, li ids1广州/li, li ids2深圳/li]
# 找到 a 标签 和 li 标签的所有对象
print(soup.select(a, li)) # [li classc1 idl1北京/li, li classc2 idl2上海/li, li ids1广州/li, li ids2深圳/li, a classlink hrefhttps://... ida1BeautifulSoup/a, a hrefhttp://... ida2lxml/a]2查找结点信息 1.获取节点内容: 适用于标签中嵌套标签的结构 obj.string obj.get_text()[推荐] 2.节点的属性 tag.name 获取标签名 eg:tagfind(li) print(tag.name) tag.attrs将属性值作为一个字典返回 3.获取节点属性 obj.attrs.get(title)[常用] obj.get(title) obj[title] # 节点信息
# 获取节点内容
obj soup.select(#d2)
# 如果 标签对象中只有内容那string和get_text()如果标签对象中除了内容还有标签那string就获取不到数据而get_text()可以获取到数据
# 推荐使用 get_text()
print(obj[0].string)
print(obj[0].get_text())# 节点的属性
# 标签的名字
obj soup.select(#p1)
print(obj[0].name) # p
# 将属性值作为一个字典返回
print(obj[0].attrs) # {id: p1, class: [p1]}# 获取节点的属性
obj soup.select(#p1)[0]
print(obj.attrs.get(class)) # [p1]
print(obj.get(class)) # [p1]
print(obj[class]) # [p1]
HTML文件
!DOCTYPE html
html langen
headmeta charsetUTF-8/titleTitle/title
/head
bodydivulli idl1 classc1北京/lili idl2 classc2上海/lili ids1广州/lili ids2深圳/lia hrefhttps://... ida1 classlinkBeautifulSoup/aspandemo/span/ul/diva hrefhttp://... ida2lxml/adiv id d2spantemp/span/divp idp1 classp1id和class都是p1怎么办/p
/body
/html 3.bs4的操作 bs4可以对服务器响应文件和本地文件进行操作 1服务器响应的文件生成对象 soup BeautifulSoupresponse.read().decode(),’lxml’ 2本地文件生成对象 soup BeautifulSoup(open(‘1.html’),’lxml’ 1对本地文件进行操作
from bs4 import BeautifulSoup# 通过解析本地文件讲解bs4 的基本语法
soup BeautifulSoup(open(_075.html,r,encodingutf-8),lxml)2对服务器响应文件进行操作
import urllib.requesturl https://www.starbucks.com.cn/menu/request urllib.request.Request(url)
response urllib.request.urlopen(request)
content response.read().decode(utf-8)from bs4 import BeautifulSoup
# 通过解析本地文件讲解bs4 的基本语法
soup BeautifulSoup(content,lxml)
4.实战
获取豆瓣评分的 Top250。
from bs4 import BeautifulSoup
import requests# 小demo
# content requests.get(http://books.toscrape.com/).text
# # html.parser 指定解析器,说明我们正在解析html内容
# soup BeautifulSoup(content,html.parser)# # findAll返回一个可迭代对象
# # 通过特有class查找元素
# all_price soup.findAll(p,attrs{class: price_color})
# # print(all_price)
# for i in all_price:
# # 只想要数字不想要标签,调用string属性
# print(i.string)# # 根据共有标签查找元素
# all_title soup.findAll(h3)
# for i in all_title:
# all_a soup.findAll(a)
# # # 如果该标签下只有一个a元素那就直接用find提取这个元素就ok了,这样就能少写一个循环
# # a soup.find(a)
# for link in all_a:
# print(link.string)headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76
}for start_num in range(0,250,25):response requests.get(fhttps://movie.douban.com/top250?start{start_num}, headers headers)html response.textsoup BeautifulSoup(html,html.parser)all_title soup.findAll(span,attrs{class:title})for title in all_title:title_string title.stringif / not in title_string:print(title_string)
参考
尚硅谷Python爬虫教程小白零基础速通含python基础爬虫案例