python之爬虫-------beautifulsoup模块
引用from bs4 import BeautifulSoup
使用流程
1.获取源代码 2.使用bs4解析源代码 3.从解析的解析的结果里面搜索数据
针对对象
1.tag标签对象 2.string文本对象
获取标签:
1.通过 . 的方式
print(soup.head.title)
但是它是有缺点的,如果同一层级下出现了同名的标签。那么只会取第一个。
2.通过bs4中的函数
find_all(Tagname,attrs={};text,limit),返回列表形式的结果集,Tagname标签名 通过标签名查找
print(soup.find_all('title'))
print(soup.find_all('meta'))
print(soup.find_all("span"))
print(soup.find_all("img"))
print(soup.find_all(['h1','h2'])) # 同时找h1和h2
print(soup.find_all(re.compile('h[1-6]'))) # 查找满足正则条件的标签
通过attrs={“class”:“value”}通过属性查找
print(soup.find_all('div',attrs={"class":"txList-sj"})) #找到class为 txList-sj 的div
print(len(soup.find_all('div',attrs={"class":"txList-sj"})))
print(soup.find_all("img",attrs={"class":"lazy"})) # 找到class为lazy 的img标签
print(soup.find_all("img",attrs={"class":"lazy","width":208})) # 找到class为lazy并且宽度为208 的img标签
print(soup.find_all('div',attrs={"data-id":True})) # 找到包含 data-id 属性的标签
print(soup.find_all('div',attrs={"data-id":re.compile("302\d+")})) # 找到data-id 是以302开头的标签
text='value’通过标签的文本内容查找节点
print(soup.find_all("a",text='江奕 海边女孩')) # 查找文本内容为 '江奕 海边女孩' 的a标签
print(soup.find_all('a',text=re.compile('女'))) # 查找文本中包含 '女' 的a标签
limit 限定查找次数
print(soup.find_all('a',text=re.compile('女'),limit=3)) # 查找文本中包含 '女' 的a标签 ,只要三条
而find()用法与find_all相同,只会返回一个人结果
对于select()通过css选择器获取
print(soup.select("a.imgTitle")) # 找到class为imgTitle的a标签
获取文本和属性
获取属性:Tag.attrs 获取该标签的所有属性
img_list=soup.find_all('img',attrs={"class":'lazy'})
for once_img in img_list:
# print(once_img.attrs)
print("https:"+once_img.attrs['src'])
获取文本:
Tag.text()获取标签下的所有文本(递归向下找)
urls=soup.find_all('div',attrs={"class":"txList-sj"})
print(urls)
for once in urls:
# print(once.attrs['href'])
print(once.text)
Tag。string获取本标签内的文本,如果里层还有变迁,返回None值
urls=soup.find_all('a',attrs={"class":"imgTitle"})
# urls=soup.find_all('div',attrs={"class":"txList-sj"})
# print(urls)
for once in urls:
# print(once.attrs['href'])
# print(once.text)
print(once.string)