鱼C论坛

 找回密码
 立即注册
查看: 1821|回复: 5

bs4 向find_all()的class_属性传递 方法 时遇到的问题

[复制链接]
发表于 2020-3-24 14:56:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from bs4 import BeautifulSoup

s = '''
    <ul class="breadcrumb">
        <li>
            <a href="index.html">Home</a>
        </li>
        <li class="active">All products</li>
    </ul>
    '''


soup = BeautifulSoup(s,'lxml')

def sss(css_class) :
    print(css_class)
    return len(css_class)>3
soup.find_all(class_=sss)


我将sss()函数的参数打印了出来,按理说它应该是 tag 的class属性对应的值,但它为None
请问这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-24 15:21:03 From FishC Mobile | 显示全部楼层
你也没调用
也没看明白你想干嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-25 17:13:04 | 显示全部楼层
wp231957 发表于 2020-3-24 15:21
你也没调用
也没看明白你想干嘛

find_all()方法可以直接传入“方法”的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 17:17:03 From FishC Mobile | 显示全部楼层
dweiyuan 发表于 2020-3-25 17:13
find_all()方法可以直接传入“方法”的

关键是你没有调用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 17:48:46 | 显示全部楼层
我刚学的,或许对你有用
import urllib.request
from bs4 import BeautifulSoup 
def url_open(url):
    req = urllib.request.Request(url)
    req.add_header("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36")
    response = urllib.request.urlopen(req)
    html = response.read().decode("gbk")
    return html
def get_url(url):
    html = url_open(url)
    soup = BeautifulSoup(html,"lxml")
    '''print(soup.prettify()) # 格式化代码,自动补全代码
    print(soup.title.string)'#只有标签名,不会有title
    print(soup.title) #有标签名的title
    print(type(soup.title))
    是head标签,如果没有,整个后边的
    print(soup.link)#返回link标签里的选项,但是都是第一个
    #获取标签的名称
    print(soup.title.name)  #获取的外层的标签的名称也就是title
    #获取属性 下面两个的内容一样
    print(soup.link.attrs["href"])
    print(soup.link["href"])
    # 获取内容
    print(soup.title.string)
    #嵌套模式
    print(soup.script.src)
    #子节点
    print(soup.header.contents) #返回的是个列表
    print(soup.header.img["src"]) #前边几层都可以.最后一层要用[]的字典形式
    print(soup.ul.li.contents)
    print(soup.ul.li.children)
    for i,child in enumerate(soup.ul.li.children):#返回的是迭代器,用enumerate来得出
        print(i,child)
    #子孙节点
    for i,child in enumerate(soup.ul.li.descendants):#返回的是迭代器,用enumerate来得出
        print(i,child)
    #父节点
    print(soup.ul)
    print("\n"+"i love fishc.com" +"\n")
    for i,child in enumerate(soup.ul.li.parent):
        print(i,child)
    #祖先节点
    print(soup.style)
    print("\n"+"i love fishc.com" +"\n")
    for i,child in enumerate(soup.style.parents):
        print(i,child)
    #兄弟节点
    print(soup.script)
    print("\n"+"i love fishc.com" +"\n")
    print(len(list(enumerate(soup.script.next_siblings))))
    print(list(enumerate(soup.script.previous_siblings)))
    #find_all与urllib类似,可以查找标签名,属性,内容  返回的是列表,class bs4 
    print(soup.find_all("ul"))
    print("-------------------------------------------------------------------------------------------------")
    print(soup.find_all("ul")[0])
    for ul in soup.find_all('ul'):
        print(ul.find_all("li"))
        print("-------------------------------------------------------------------------------------------------")
    #attrs是查询字典属性的属性,传入的参数是字典
    print(soup.find_all(attrs = { 'rel':"stylesheet"}))
    print("-------------------------------------------------------------------------------------------------")
    print(soup.find_all(attrs = {'id':"nav_sel"}))
    #也可以直接插class,id等,由于class在python属于关键词,后边要交_,输入的是class_
    print(soup.find_all(rel="stylesheet"))
    print("-------------------------------------------------------------------------------------------------")
    print(soup.find_all(id = "nav_sel"))
    # 根据text进行选择,返回的就是字,并不是条目
    print(soup.find_all(text = "福利"))
    # find方法和fin_dall类似,find返回第一个元素
    print(soup.find("ul"))
    print(type(soup.find('ul')))
    print("-------------------------------------------------------------------------------------------------")
    print(soup.find("page"))
    #其他函数 find_parent()父,子,兄弟,后面的,前面的

    #CSS选择器,使用select()直接传入css选择器
    #选择class时要加一个点,如果存在嵌套关系,两个class之间不需要加任何符号,用一个引号括起来即可,加一个空格;可以选标签; 用id选择,id用#代替 id ="list2"class = element可以用“#list2 .element”,返回的是列表
    print(soup.select('.hot'))
    print("-------------------------------------------------------------------------------------------------")
    print(soup.select(".container .body"))
    print(soup.select("#list2 .element")
    print(soup.select("ul li"))'''
    #select获取属性,[属性名] 或者ul[].attrs["id"],由于返回的是列表,所以要变成字符串输出
    print(soup.link.attrs["href"])
    print(soup.select('link')[0].attrs["href"])
    #get_text获取标签里边的文本,也是列表要加序列号
    for each in soup.select("a"):
        print(each.get_text())
if __name__ == "__main__":
    url = "http://www.quannovel.com/read/11/2588.html"
    get_url(url)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 10:47:02 | 显示全部楼层
wp231957 发表于 2020-3-25 17:17
关键是你没有调用啊

请问在哪里调用???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表