LINAICAI
V2EX  ›  问与答

做一次 BeautifulSoup 问题伸手党

  •  
  •   LINAICAI · May 25, 2015 · 1951 views
    This topic created in 4032 days ago, the information mentioned may be changed or developed.
    通过print(soup.find_all('div','loopsum',limit=1))得到下面的内容

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

    请问怎么拿到<p></p>之间的正文?
    14 replies    2015-05-26 20:38:06 +08:00
    Sylv
        1
    Sylv  
       May 25, 2015 via iPhone   ❤️ 1
    result = soup.find('div', 'loopsum')
    print result.p.text
    killpanda
        2
    killpanda  
       May 25, 2015
    result = soup.get_text()
    LINAICAI
        3
    LINAICAI  
    OP
       May 25, 2015
    @killpanda
    @Sylv
    好厉害
    LINAICAI
        4
    LINAICAI  
    OP
       May 26, 2015
    @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  
       May 26, 2015 via iPhone
    tag['data-original']

    先去过遍 bs4 的文档,这些都很基础
    LINAICAI
        6
    LINAICAI  
    OP
       May 26, 2015
    @Sylv 还是不会。。。看懂了文档 运行不错想要的东西啊
    大神,你看我这标题,帮忙下
    LINAICAI
        7
    LINAICAI  
    OP
       May 26, 2015
    @Sylv data-original不是普通的属性节点啊
    find_all好像没发搜
    Sylv
        8
    Sylv  
       May 26, 2015 via iPhone
    没明白你的问题,你想找有 data-original 的 tag?
    LINAICAI
        9
    LINAICAI  
    OP
       May 26, 2015
    @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  
       May 26, 2015 via iPhone
    results = soup.find_all('img', data-original=True)
    print results[0]['data-original']
    Sylv
        11
    Sylv  
       May 26, 2015 via iPhone
    results = soup.find_all('img', class_="lazy", data-original=True)
    print results[0]['data-original']
    LINAICAI
        12
    LINAICAI  
    OP
       May 26, 2015
    @Sylv
    出错了
    images = soup.find_all('img', class_='lazy', data-original=True)
    SyntaxError: keyword can't be an expression
    Sylv
        13
    Sylv  
       May 26, 2015 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
       May 26, 2015
    @Sylv
    已经搞定了
    print("----------开始爬图片----------")
    images = soup.find_all('img', class_='lazy', attrs={'data-original':True})
    for obj in images:
    #图片
    print obj['data-original']
    print('\n')

    难点主要是-号的问题,不过因为大神提示,对字段的用法有了一点体会。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3000 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 14:49 · PVG 22:49 · LAX 07:49 · JFK 10:49
    ♥ Do have faith in what you're doing.