爬虫-bs4
# coding=utf8
from bs4 import BeautifulSoup
import requests
html = requests.get("http://www.baidu.com")
html.encoding='utf-8'
soup = BeautifulSoup(html.text,"html.parser")
print(soup.title) #获取带title标签的文本
print(soup.title.text)#获取标题里的文本
print(soup.title.string)#获取标题里的文本
soup.title.string = 'hahahha'
#print(u"修改title,只能修改已下载的:")
print(soup.title.string)#获取标题里的文本
print(type(soup))
# print(soup.prettify()[:100]) #输出网页源码 前100
print(soup.a) #获取带a标签的内容
print(soup.a.text) #获取a标签里的内容
print(soup.a['name'])#获取属性值
print(soup.a.get('href'))#获取属性值
soup.a['name'] = 'test'
print(u"修改a标签对应的name属性值,只能修改已下载的:")
print(soup.a)
#del soup.a['name'] #删除name属性值
#print(u"删除a标签对应的name属性值,只能修改已下载的:")
#print(soup.a)
print(soup.head.contents[0])#获取head标签下,子节点内容
print(type(soup.head.contents))
print(soup.head.children)#获取head标签下,子节点
print(type(soup.head.children))#迭代器
print(list(soup.head.children))#实体化
print(soup.body.descendants)#获取body标签下,子孙节点
# for i in soup.body.descendants: #一般不用
# print(i)
print(soup.body.string)#获取所有文本,因无法确定打印哪个,就展示none
print(soup.body.strings)#获取所有文本
print(soup.body.stripped_strings)#对文本空的空行做处理
for i in soup.body.stripped_strings:
print(i)
print(soup.body.a.string)#打印a标签的可以
print(type(soup.body.descendants))
print(list(soup.body.descendants))
print(soup.body.parent)#获取body标签的父节点,就是html
content = soup.head.title.string
print(content.parent.parent)#获取title的父节点title的父节点head的信息
for i in content.parents:#输出属性
print(i.name)
print(soup.meta.next_siblings)#此节点的下一个兄弟所有节点,回车算一个节点,加s就是迭代器
print(soup.link.previous_siblings)#此节点的上一个兄弟所有节点,加s就是迭代器
print(soup.meta.next_elements)#加s就是迭代器
print(soup.link.previous_elements)#加s就是迭代器
print(list(soup.link.previous_elements))#加list实体化
print(soup.meta.next_sibling)#此节点的下一个兄弟所有节点,回车算一个节点,加s就是迭代器
print(soup.meta.next_element)#加s就是迭代器
print(soup.link.previous_sibling)#此节点的上一个兄弟所有节点,加s就是迭代器
print(soup.link.previous_element)#加s就是迭代器
print("----------------")
for i in soup.meta.next_siblings:
print(i)
rint(soup.find_all('div'))#找到所有该属性节点
for tag in soup.find_all(re.compile('b')): #正则表达式,含有b的标签
print(tag.name)
print(soup.find_all(['a','b']))#含有a、b标签的列表
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr("id")#有class属性,没有id属性才要
print(soup.find_all(has_class_but_no_id))
print(soup.find_all(id='wrapper'))
print(soup.find_all(href=re.compile('b')))
print(soup.find_all(href=re.compile('b'),rel='stylesheet'))
print(soup.find_all('div',id='wrapper'))
print(soup.find_all(attrs={'name':'tj_trnews'}))#键值对
print(soup.find_all(text='视频'))#搜索
print(soup.find_all(text=['视频','新闻','地图']))#搜索
print(soup.find_all(text=re.compile('闻')))#正则、
print(soup.find_all(text=re.compile('闻'))[0])#正则、
print(soup.find_all(text=re.compile('闻'))[0].parent)#正则、
print(soup.find_all('input',limit=2))
print(soup.find_all('input',recursive=False))#搜索结果范围为孙节点
print(soup.find_all('input',recursive=True))#搜索结果范围为子节点
print(soup.select('input'))
print(soup.select('.head_wrapper'))# .代表class为head_wrapper的
print(soup.select('#head'))# #代表id为head
print(soup.select('div #head'))# div标签下且id为head
print(soup.select('body>div'))# body标签下的div标签
print(soup.select('body a[href="http://news.baidu.com"]'))# body标签下,a属性的hred值对象
一切技术都是为业务服务,脱离业务的技术一文不值!