【问题标题】:How do I extract contents within rel in <a> tag?如何在 <a> 标签中提取 rel 中的内容?
【发布时间】:2017-12-22 10:09:52
【问题描述】:
<a href="#" class="tip" rel="&nbsp;
    Principal Name - S. BALKAR SINGH
    Mobile No. - 8146611008
    Email ID - gsssdhapaiasr@gmail.com
    &nbsp;" style="user-select: text;">View Contact Details<span 
class="caret"></span></a>

委托人姓名、手机号码和电子邮件 ID 是我感兴趣的内容。当我指定 soup.find('a', {'class':'tip'}) 时,它只给我“查看联系方式”。

有没有办法提取rel中的内容?

【问题讨论】:

    标签: python web-scraping beautifulsoup rel


    【解决方案1】:

    rel 是属性,所以你必须使用['rel'] - 即。 soup.find('a', {'class':'tip'})['rel']

    工作示例

    data = '''<a href="#" class="tip" rel="&nbsp;
        Principal Name - S. BALKAR SINGH
        Mobile No. - 8146611008
        Email ID - gsssdhapaiasr@gmail.com
        &nbsp;" style="user-select: text;">View Contact Details<span 
    class="caret"></span></a>'''
    
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(data, 'html.parser')
    
    item = soup.find('a', {'class':'tip'})
    
    print('text:', item.text)
    print(' rel:', item['rel'])
    print(' rel:', ' '.join(item['rel']))
    

    结果:

    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'S.', 'BALKAR', 'SINGH', 'Mobile', 'No.', '-', '8146611008', 'Email', 'ID', '-', 'gsssdhapaiasr@gmail.com', '']
     rel:  Principal Name - S. BALKAR SINGH Mobile No. - 8146611008 Email ID - gsssdhapaiasr@gmail.com 
    

    BS for rel 返回列表,而不是一个字符串,因为Multi-valued attributes


    编辑: 要获取包含数据的表格,您必须发送 POST 请求以及通常将浏览器发送到服务器的所有数据 - 这意味着数据形式,它甚至可以是空字符串,但服务器有接收表单域。

    import requests
    from bs4 import BeautifulSoup
    
    headers = {'User-Agent': 'Mozilla/5.0'}
    
    # form fields send to server
    params = {
        'SchoolType': '',
        'Dist1': '',    
        'Sch1': '', 
        'SearchString': ''  
    }
    
    r = requests.post('http://www.registration.pseb.ac.in/School/Schoollist', headers=headers, data=params)
    
    soup = BeautifulSoup(r.text, 'html.parser')
    
    all_a = soup.find_all('a', {'class':'tip'})
    
    for items in all_a:
        print('text:', item.text)
        print(' rel:', item['rel'])
        print(' rel:', ' '.join(item['rel']))
        print('-----')
    

    结果:

    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    text: View Contact Details
     rel: ['', 'Principal', 'Name', '-', 'POONAM', 'POONI', 'Mobile', 'No.', '-', '8568940353', 'Email', 'ID', '-', 'GAURAVGUPTA806@YAHOO.COM', '']
     rel:  Principal Name - POONAM POONI Mobile No. - 8568940353 Email ID - GAURAVGUPTA806@YAHOO.COM 
    -----
    

    【讨论】:

    • 当我使用soup.find('a', {'class':'tip'})['rel'] url==>registration.pseb.ac.in/School/Schoollist# 时出现“NoneType object not subscriptable”错误
    • 这意味着soup.find('a', {'class':'tip'})给了你None,你甚至不应该得到"View Contact Details"。带有示例 HTML 的代码对我有用。
    • 如果您直接读取您的 url(请求 GET),那么&lt;a class="tip"&gt;soup.find('a', {'class':'tip'}) 没有数据提供None 并且您不能使用["rel"]。您必须将其阅读为 POST,然后您才能获得 &lt;a class="tip"&gt;,但要确保您仍然可以检查 soup.find('a', {'class':'tip'}) 是否不提供 None
    • 当我使用 parsehub 时,我得到“查看联系方式”。但是当我使用 beautifulsoup 时,我得到“NoneType object not subscriptable”错误
    • 问题不是BeautifulSoup,而是你如何得到这个页面——使用requests.get()你得到没有数据的页面,使用requests.post()你可以发送“搜索数据”,它会返回带有表格结果的页面.
    猜你喜欢
    • 2011-09-27
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多