V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LINAICAI
V2EX  ›  问与答

做一次 BeautifulSoup 问题伸手党

  •  
  •   LINAICAI · 2015-05-25 18:23:58 +08:00 · 1504 次点击
    这是一个创建于 3272 天前的主题,其中的信息可能已经有所发展或是发生改变。
    通过print(soup.find_all('div','loopsum',limit=1))得到下面的内容

    [<div class="loopsum"><p>xxxx</p></div>]

    请问怎么拿到<p></p>之间的正文?
    14 条回复    2015-05-26 20:38:06 +08:00
    Sylv
        1
    Sylv  
       2015-05-25 18:32:22 +08:00 via iPhone   ❤️ 1
    result = soup.find('div', 'loopsum')
    print result.p.text
    killpanda
        2
    killpanda  
       2015-05-25 18:47:49 +08:00
    result = soup.get_text()
    LINAICAI
        3
    LINAICAI  
    OP
       2015-05-25 20:18:19 +08:00
    @killpanda
    @Sylv
    好厉害
    LINAICAI
        4
    LINAICAI  
    OP
       2015-05-26 15:14:17 +08:00
    @Sylv 大牛再请教个问题,形如data-original的属性怎么取
    比如<img alt="aaa" class="lazy" data-original="xxx" height="140" src="ccc" width="201"/>

    想得到xxx,怎么写,这段已经是通过soup.findAll('div','loopmain',limit=10)拿到的,想进一步得到xxx?
    Sylv
        5
    Sylv  
       2015-05-26 15:58:30 +08:00 via iPhone
    tag['data-original']

    先去过遍 bs4 的文档,这些都很基础
    LINAICAI
        6
    LINAICAI  
    OP
       2015-05-26 17:17:58 +08:00
    @Sylv 还是不会。。。看懂了文档 运行不错想要的东西啊
    大神,你看我这标题,帮忙下
    LINAICAI
        7
    LINAICAI  
    OP
       2015-05-26 17:18:58 +08:00
    @Sylv data-original不是普通的属性节点啊
    find_all好像没发搜
    Sylv
        8
    Sylv  
       2015-05-26 17:32:08 +08:00 via iPhone
    没明白你的问题,你想找有 data-original 的 tag?
    LINAICAI
        9
    LINAICAI  
    OP
       2015-05-26 17:37:54 +08:00
    @Sylv 想找 所有data-original里面的文本,这个文本是个图片URL,但并不是所有data-original都是我要的,所以要加一个条件img里面带class='lazy'的

    <img alt="aaa" class="lazy" data-original="xxx" height="140" src="ccc" width="201"/>

    想取到xxx的文本值
    Sylv
        10
    Sylv  
       2015-05-26 17:38:35 +08:00 via iPhone
    results = soup.find_all('img', data-original=True)
    print results[0]['data-original']
    Sylv
        11
    Sylv  
       2015-05-26 17:39:57 +08:00 via iPhone
    results = soup.find_all('img', class_="lazy", data-original=True)
    print results[0]['data-original']
    LINAICAI
        12
    LINAICAI  
    OP
       2015-05-26 17:48:24 +08:00
    @Sylv
    出错了
    images = soup.find_all('img', class_='lazy', data-original=True)
    SyntaxError: keyword can't be an expression
    Sylv
        13
    Sylv  
       2015-05-26 17:57:54 +08:00 via iPhone   ❤️ 1
    images = soup.find_all('img', class_='lazy', attrs={'data-original':True})

    没注意到参数名中不能有 “-“ 的问题,得用字典

    Some attributes, like the data-* attributes in HTML 5, have names that can’t be used as the names of keyword arguments.
    You can use these attributes in searches by putting them into a dictionary and passing the dictionary into find_all() as the attrs argument:
    LINAICAI
        14
    LINAICAI  
    OP
       2015-05-26 20:38:06 +08:00
    @Sylv
    已经搞定了
    print("----------开始爬图片----------")
    images = soup.find_all('img', class_='lazy', attrs={'data-original':True})
    for obj in images:
    #图片
    print obj['data-original']
    print('\n')

    难点主要是-号的问题,不过因为大神提示,对字段的用法有了一点体会。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3638 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:55 · PVG 12:55 · LAX 21:55 · JFK 00:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.