zoukankan      html  css  js  c++  java
  • 爬虫-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值对象



  • 相关阅读:
    GODIAG GD801 ODOMETER里程改正指南车清单
    XTOOL A80 Pro(H6 Pro)使用提示+常见问题解答
    Vident IAUTO702 Pro 2012 Peugeot 308喷油器编码:是否支持?
    es创建模板
    docker 帮助信息
    聊聊白盒测试、黑盒测试
    Go 通过结构体指定字段进行排序
    Go语言 之结构体数组 赋值
    PHP中json_encode与json_decode
    golang sync WaitGroup
  • 原文地址:https://www.cnblogs.com/bubutianshu/p/14120264.html
Copyright © 2011-2022 走看看