美丽的汤-从div类内的外部引号中提取值

时间:2018-11-16 18:28:06

标签: python beautifulsoup html-parsing

使用以下代码从网站提取的属性中的元素中提取特定值时遇到麻烦:

from bs4 import BeautifulSoup
import requests

# Get mills and estates information from dashboard
url = 'http://nestetraceabilitydashboard.com/nestes-palm-oil-dashboard' 
page = requests.get(url).text
soup = BeautifulSoup(page, "html.parser")

divList = soup.findAll('div', attrs={"class" : "map-item estate-map-item"})
data = {}
for div in divList:
    for k,v in div.attrs.items(): 
        if k not in ('class'):
            data[k] = data.get(k, []) + [v]

df = pd.DataFrame(data)

divList的摘录如下:

[<div class="map-item estate-map-item" data-country="Indonesia" data-latitude="1.926944000" data-location="Riau" data-longitude="99.906390000" data-mills="Aek Nabara" id="map_item_5600">(Aek Nabara) - Aek Nabara</div>,
 <div class="map-item estate-map-item" data-country="Indonesia" data-latitude="0.429444444" data-location="Riau" data-longitude="101.818611100" data-mills="Buatan I " id="map_item_5601">(Buatan I/II ) - Buatan</div>,

但是,输出dictdataframe删除了id中map_item_XXXX之后的所有内容。

我该如何只在dict中的引号之外获取值,然后再将其放入dataframe id列中,例如(Aek Nabara) - Aek Nabara上方divList

2 个答案:

答案 0 :(得分:2)

(Aek Nabara) - Aek Nabar不是属性(.attrs),而是textContent使用.text来获取值

for div in divList:
    for k,v in div.attrs.items(): 
        if k != 'class':
            if k == 'id':
                # insert "(Aek Nabara) - Aek Nabara" instead of "map_item_5600"
                data[k] = data.get(k, []) + [div.text.strip()]
            else:
                data[k] = data.get(k, []) + [v]

df = pd.DataFrame(data)

答案 1 :(得分:1)

for div in divList:
    print(div.text)

Output:
(Aek Nabara) - Aek Nabara
(Buatan I/II ) - Buatan
(Buatan I ) - Bhakti Mandiri Co/op
(Buatan I ) - Jaya Makmur Co/op
(Buatan I ) - Sumber Rejeki Co/op
(Buatan I ) - Sejahtera Co/op
(Buatan II) - KUD Buatan Jaya
(Buatan II) - KUD Mitra Usaha
(Buatan II) - KUD Makarti Jaya
(Buatan II) - KUD Bina Mulia
(Buatan II) - KUD Delima Sakti
(Buatan II) - KUD Mulus Rhayu
(Buatan II) - KUD Bhirawa Bhakti
(Buatan II) - KUD Tani Rukun
(Buatan II) - KUD Kebun Sawit Harapan
(Bungo Tebo) - Bungo Tebo
(Bungo Tebo) - Bungo Tebo Plasma
(Gunung Melayu I) - Pulau Maria
(Gunung Melayu II) - Batu Anam
(Gunung Melayu II) - Sentral
(Gunung Melayu II) - Aek Tarum
(Muara Bulian) - Muara Bulian
(Muara Bulian) - KUD Barokah
(Muara Bulian) - KUD Subur Makmur
(Muara Bulian) - KUD Budi Sari
(Muara Bulian) - KUD Makmur Rejeki
(Muara Bulian) - KUD Karya Lestari
(Muara Bulian) - KUD Tuah Sakato
(Negeri Lama I/II) - Negeri Lama Selatan
(Negeri Lama I/II) - Negeri Lama Central
(Negeri Lama I/II) - Negeri Lama Utara
(Negeri Lama I/II) - Aek Kuo
(Peranap) - Peranap
(Peranap) - Peranap Plasma
(Segati) - Segati
(Segati) - Penarikan
(Segati) - Penarikan (KKPA)
(Segati) - Gondai
(Taman Raja) - Taman Raja 
(Taman Raja) - Badang 
(Tanjung Pauh) - Gunung Sahilan Co-Op
(Tanjung Selamat) - Tanjung Selamat
(Tanjung Selamat) - Kebun Pangkatan
(Teluk Panjie) - Teluk Panjie
(Topaz) - Topaz
(Tungkal Ulu) - Tungkal Ulu
(Tungkal Ulu) - Tungkal Ulu Smallholders Estate
(Ukui I) - Ukui
(Ukui I) - KUD Sumber Makmur
(Ukui I) - KUD Bina Usaha Baru
(Ukui I) - KUD Bakti
(Ukui I) - KUD Karya Bersama
(Ukui I) - KUD Sawit Subur
(Ukui I) - KUD Bina Sejahtera
(Ukui I) - KUD Sumber Bhagia
(Ukui I) - KUD Bukit Potalo
(Ukui I) - KUD Usaha Baru
(Ukui II) - Soga
(Ukui II) - KUD Tani Subur
(Ukui II) - KUD Karya Tani
(Ukui II) - KUD Mekar Abadi
(Ukui II) - KUD Trani Maju
(Ukui II) - KUD Tani Bahagia
(Ukui II) - KUD Usaha Tani
(Arindo Trisejahtera) - Arindo Trisejahtera-1
(Meridan Sejatisurya) - Meridan Sejatisurja
(Panca Surya Agrindo) - Panca Surya Agrindo
(Perdana Intisawit Perkasa) - Perdana Intisawit Perkasa
(Subur Arum Makmur) - Subur Arum Makmur
(Surya Intisari Raya) - Surya Intisari Raya
(Batu Ampar) - Batu Ampar
(Batu Ampar) - Batu Mulia
(Batu Ampar/Sungai Kupang) - Sungai Panci
(Hanau) - Hanau
(Hanau) - Tasik Mas
(Hanau) - Tanjung Paring
(Hanau) - Langadang
(Kijang) - Kijang
(Kijang) - Kijang Kencana Plasma
(Libo) - Libo
(Libo) - Nenggala
(Libo) - Sungai Rokan
(Libo) - Sungai Tapung Plasma
(Libo / Naga Sakti) - Rama Bakti
(Naga Sakti) - Naga Mas
(Naga Sakti) - Naga Sakti
(Perdana) - Perdana
(Perdana) - Semandau
(Perdana) - Muara Dua
(Perdana) - Leggana
(Rama Rama) - Rama Rama
(Rama Rama) - Amarta Jaya Plasma
(Sam Sam ) - Sam Sam
(Sam Sam ) - Kandista Sari
(Sam Sam ) - Palapa
(Sam Sam ) - Ujung Tanjung
(Semilar) - Semilar 
(Semilar) - Sei Rindu
(Semilar) - Mandang
(Semilar) - Puri
(Sungai Kupang) - Sungai Kupang
(Sungai Rungau) - Sungai Runggau
(Sungai Rungau) - Sungai Seruyan
(Sungai Rungau) - Terawan
(Sungai Rungau) - Tangar
(Sungai Rungau) - Bukit Tiga
(Tanah Laut) - Tanah Laut
(Tanah Laut) - Kintapura
(Bumi Permai) - Beringin Jaya
(Bumi Permai) - Kahoi
(Bumi Permai) - Lembuswana
(Bumi Permai) - Bumi Permai
(Bumi Permai) - Prima
(Bumi Permai) - Rahayu
(Bumi Permai) - Mahakam
(Jorong) - Kebun Barat
(Jorong) - Kebun Tengah
(Penajam) - Penajam
(Satui) - Timur Estate
(Satui) - Satui
(Mandau) - Mandau 1
(Mandau) - Mandau 2
(Mandau) - Mandau 3
(Mandau) - Mandau 4
(Mandau) - Mandau 5
(Mandau) - Mandau 6
(Nilo 1) - Nilo Barat 1
(Nilo 1) - Nilo Barat 2
(Nilo 2) - Nilo Timur 1
(Nilo 2) - Nilo Timur 2
(Steelindo Wahana Perkasa) - Air Karang
(Steelindo Wahana Perkasa) - Air Putih
(Steelindo Wahana Perkasa) - Air Raya
(Steelindo Wahana Perkasa) - Bentaian 
(Steelindo Wahana Perkasa) - Gunung Nayo
(Steelindo Wahana Perkasa) - Gunung Seru
(Steelindo Wahana Perkasa) - Limau Manis
(Steelindo Wahana Perkasa) - Mempaya
(Steelindo Wahana Perkasa) - Buding
(Steelindo Wahana Perkasa) - Cendil
(Steelindo Wahana Perkasa) - Air Seruk
(Steelindo Wahana Perkasa) - Kacang Butor
(Steelindo Wahana Perkasa) - Air Selumar
(Tapung kanan) - Tapung Kanan 1
(Tapung kanan) - Tapung Kanan 2
(Tapung kanan) - Tapung Kanan 3
(Batang Kulim) - Estate I
(Batang Kulim) - Estate II
(Batang Kulim) - Estate VI
(Batang Kulim) - KKPA Merbau Sakti
(Maju Aneka Sawit) - Tanah Mas
(Maju Aneka Sawit) -Alam Sahara
(Maju Aneka Sawit) - Kas Desa Tanah Putih
(Maju Aneka Sawit) - Kas Desa Penyang
(Maju Aneka Sawit) - Sari Mas 2
(Sukajadi Sawit Mekar 1) - Sebabi
(Sukajadi Sawit Mekar 1) - Seranau
(Sukajadi Sawit Mekar 2) - Bukit Linang
(Sukajadi Sawit Mekar 2) - Bukit Limas
(Lungmanis) - Lungmanis
(Lungmanis) - Bukit Tabin
(Lungmanis) - Tungku
(Pinang) - Pinang
(Pinang) - Sigalong
(Pinang) - Pangeran
(Rimmer) - Rimmer
(Rimmer) - Sungai Silabukan
(Mill 2) - Pang Burong
(Mill 2) - Tundong
(Mill 2) - Sri Kunak
(Mill 2) - Ringlet
(Mill 2) - Jatika
(Sapi) - Sapi 1 & 2
(Sapi) - Kiabau
(Sapi) - Terusan 1
(Sapi) - Terusan 2