鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 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
请问这是为什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-24 15:21:03 From FishC Mobile | 显示全部楼层
你也没调用
也没看明白你想干嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

find_all()方法可以直接传入“方法”的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

关键是你没有调用啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 17:48:46 | 显示全部楼层
我刚学的,或许对你有用
  1. import urllib.request
  2. from bs4 import BeautifulSoup
  3. def url_open(url):
  4.     req = urllib.request.Request(url)
  5.     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")
  6.     response = urllib.request.urlopen(req)
  7.     html = response.read().decode("gbk")
  8.     return html
  9. def get_url(url):
  10.     html = url_open(url)
  11.     soup = BeautifulSoup(html,"lxml")
  12.     '''print(soup.prettify()) # 格式化代码,自动补全代码
  13.     print(soup.title.string)'#只有标签名,不会有title
  14.     print(soup.title) #有标签名的title
  15.     print(type(soup.title))
  16.     是head标签,如果没有,整个后边的
  17.     print(soup.link)#返回link标签里的选项,但是都是第一个
  18.     #获取标签的名称
  19.     print(soup.title.name)  #获取的外层的标签的名称也就是title
  20.     #获取属性 下面两个的内容一样
  21.     print(soup.link.attrs["href"])
  22.     print(soup.link["href"])
  23.     # 获取内容
  24.     print(soup.title.string)
  25.     #嵌套模式
  26.     print(soup.script.src)
  27.     #子节点
  28.     print(soup.header.contents) #返回的是个列表
  29.     print(soup.header.img["src"]) #前边几层都可以.最后一层要用[]的字典形式
  30.     print(soup.ul.li.contents)
  31.     print(soup.ul.li.children)
  32.     for i,child in enumerate(soup.ul.li.children):#返回的是迭代器,用enumerate来得出
  33.         print(i,child)
  34.     #子孙节点
  35.     for i,child in enumerate(soup.ul.li.descendants):#返回的是迭代器,用enumerate来得出
  36.         print(i,child)
  37.     #父节点
  38.     print(soup.ul)
  39.     print("\n"+"i love fishc.com" +"\n")
  40.     for i,child in enumerate(soup.ul.li.parent):
  41.         print(i,child)
  42.     #祖先节点
  43.     print(soup.style)
  44.     print("\n"+"i love fishc.com" +"\n")
  45.     for i,child in enumerate(soup.style.parents):
  46.         print(i,child)
  47.     #兄弟节点
  48.     print(soup.script)
  49.     print("\n"+"i love fishc.com" +"\n")
  50.     print(len(list(enumerate(soup.script.next_siblings))))
  51.     print(list(enumerate(soup.script.previous_siblings)))
  52.     #find_all与urllib类似,可以查找标签名,属性,内容  返回的是列表,class bs4
  53.     print(soup.find_all("ul"))
  54.     print("-------------------------------------------------------------------------------------------------")
  55.     print(soup.find_all("ul")[0])
  56.     for ul in soup.find_all('ul'):
  57.         print(ul.find_all("li"))
  58.         print("-------------------------------------------------------------------------------------------------")
  59.     #attrs是查询字典属性的属性,传入的参数是字典
  60.     print(soup.find_all(attrs = { 'rel':"stylesheet"}))
  61.     print("-------------------------------------------------------------------------------------------------")
  62.     print(soup.find_all(attrs = {'id':"nav_sel"}))
  63.     #也可以直接插class,id等,由于class在python属于关键词,后边要交_,输入的是class_
  64.     print(soup.find_all(rel="stylesheet"))
  65.     print("-------------------------------------------------------------------------------------------------")
  66.     print(soup.find_all(id = "nav_sel"))
  67.     # 根据text进行选择,返回的就是字,并不是条目
  68.     print(soup.find_all(text = "福利"))
  69.     # find方法和fin_dall类似,find返回第一个元素
  70.     print(soup.find("ul"))
  71.     print(type(soup.find('ul')))
  72.     print("-------------------------------------------------------------------------------------------------")
  73.     print(soup.find("page"))
  74.     #其他函数 find_parent()父,子,兄弟,后面的,前面的

  75.     #CSS选择器,使用select()直接传入css选择器
  76.     #选择class时要加一个点,如果存在嵌套关系,两个class之间不需要加任何符号,用一个引号括起来即可,加一个空格;可以选标签; 用id选择,id用#代替 id ="list2"class = element可以用“#list2 .element”,返回的是列表
  77.     print(soup.select('.hot'))
  78.     print("-------------------------------------------------------------------------------------------------")
  79.     print(soup.select(".container .body"))
  80.     print(soup.select("#list2 .element")
  81.     print(soup.select("ul li"))'''
  82.     #select获取属性,[属性名] 或者ul[].attrs["id"],由于返回的是列表,所以要变成字符串输出
  83.     print(soup.link.attrs["href"])
  84.     print(soup.select('link')[0].attrs["href"])
  85.     #get_text获取标签里边的文本,也是列表要加序列号
  86.     for each in soup.select("a"):
  87.         print(each.get_text())
  88. if __name__ == "__main__":
  89.     url = "http://www.quannovel.com/read/11/2588.html"
  90.     get_url(url)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

请问在哪里调用???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-17 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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