简体   繁体   English

AttributeError: 'NoneType' 对象没有属性 'text' BeautifulSoup

[英]AttributeError: 'NoneType' object has no attribute 'text' BeautifulSoup

links = ['https://www.cnnindonesia.com/tv/20211101202542-407-715220/video-20-november-tiongkok-vaksinasi-anak-usia-3-11-tahun', 
        'https://www.cnnindonesia.com/nasional/20211101192825-32-715200/demokrat-sindir-menteri-jokowi-jadi-marketing-bisnis-pcr', 
        'https://www.cnnindonesia.com/nasional/20211101210153-25-715231/indonesia-distribusikan-2355-juta-dosis-vaksin-sepanjang-2021']
            
titles = []
news_content = []
dates = []
    
    for link in links:
        response = requests.get(link)
        soup_link = bs(response.text, 'lxml')
        cont_dtl = soup_link.find_all('div', class_='content_detail')
        for cont in cont_dtl:
            news_title = cont.find('h1', class_='title').text.strip()
            titles.append(news_title)
            date_upload = cont.find('div', class_='date').text.strip()
            dates.append(date_upload)
            find_p = cont.find_all('p')
            list_paragraphs = []
            for p in range(len(find_p)):
                paragraph = find_p[p].get_text()
                list_paragraphs.append(paragraph)
                final_text = " ".join(list_paragraphs)
            news_content.append(final_text)

when i tried change to css select method it was still result same output = AttributeError: 'NoneType' object has no attribute 'text'当我尝试更改 css select 方法时,结果仍然是相同的输出 = AttributeError: 'NoneType' object has no attribute 'text'

I don't know in which line you get "AttributeError: 'NoneType'" But sometimes bs4 receives None if there is more div or you are looking for something that has no text inside or simply didn't find div/h1 with this class.我不知道你在哪一行得到“AttributeError: 'NoneType'”但有时 bs4 会收到 None 如果有更多的 div 或者你正在寻找里面没有文本的东西或者只是没有找到这个类的 div/h1 . Check if every div,h1 has text inside and has a class you mentioned.检查每个 div,h1 里面是否有文本并且有你提到的类。 I personally do it like that(I add it to every "find" where I have a problem with None Type):我个人是这样做的(我将它添加到我遇到 None 类型问题的每个“查找”中):

if cont.find('div', class_='date') == None: 
    pass
else:
    date_upload = cont.find('div', class_='date').text.strip()

It is interesting that your code works fine in my python :D But try this what I said有趣的是,你的代码在我的 python 中运行良好:D 但是试试我说的

It's working fine meaning I'm getting nothing as error.它工作正常意味着我没有收到任何错误。

    import requests
    from bs4 import BeautifulSoup as bs
    
    links = ['https://www.cnnindonesia.com/tv/20211101202542-407-715220/video-20-november-tiongkok-vaksinasi-anak-usia-3-11-tahun', 
            'https://www.cnnindonesia.com/nasional/20211101192825-32-715200/demokrat-sindir-menteri-jokowi-jadi-marketing-bisnis-pcr', 
            'https://www.cnnindonesia.com/nasional/20211101210153-25-715231/indonesia-distribusikan-2355-juta-dosis-vaksin-sepanjang-2021']
                
    titles = []
    news_content = []
    dates = []
        
    for link in links:
        response = requests.get(link)
        soup_link = bs(response.text, 'lxml')
        cont_dtl = soup_link.find_all('div', class_='content_detail')
        for cont in cont_dtl:
            news_title = cont.find('h1', class_='title').text.strip()
            titles.append(news_title)
            date_upload = cont.find('div', class_='date').text.strip()
            dates.append(date_upload)
            find_p = cont.find_all('p')
            list_paragraphs = []
            for p in range(len(find_p)):
                paragraph = find_p[p].get_text()
                list_paragraphs.append(paragraph)
                final_text = " ".join(list_paragraphs)
            news_content.append(final_text)
    print(news_content)

Output:输出:

['Pemerintah Tiongkok mulai memperluas cakupan vaksinasi Covid-19 dengan memberikan suntikan dosis pertama kepada anak-anak berusia 3 hingga 11 tahun. Keputusan ini di ambil setelah munculnya varian baru Covid-19.', 'Wakil Sekretaris 
Jenderal (Wasekjen) DPP\xa0Partai Demokrat, Irwan, menyindir dugaan keterlibatan sejumlah menteri dari Kabinet Presiden Joko Widodo\xa0(Jokowi) dalam bisnis tes PCR. Ia mengingatkan, jajaran menteri di Jokowi tidak menjadi marketing atau agen pemasaran dan kongsi bisnis dengan mengeluarkan kebijakan yang menguntungkan perusahaan penyedia layanan PCR. Menurutnya, langkah pemerintah mengeluarkan kebijakan yang menguntungkan perusahaan penyedia layanan PCR sangat zalim di tengah penderitaan rakyat akibat pandemi Covid-19. "Saya ingatkan, pemerintah jangan sampai jadi marketing atau terjebak kongsi bisnis dengan perusahaan PCR di tengah pandemi yang membuat rakyat menderita dengan mengeluarkan regulasi yang menguntungkan para pengusaha PCR," kata Irwan kepada CNNIndonesia.com, Senin (1/11). Dia menyatakan, banyak cara yang bisa dilakukan oleh pemerintah untuk membatasi mobilitas masyarakat tanpa harus mewajibkan penggunaan PCR. Lebih lanjut, Irwan meminta pemerintah membatalkan Surat Edaran nomor SE 90 
Tahun 2021 mengenai Perubahan Atas Surat Edaran Menteri Perhubungan Nomor SE 86 Tahun 2021 tentang Petunjuk Pelaksanaan Perjalanan Orang Dalam Negeri dengan Transportasi Darat Pada Masa Pandemi Covid-19. Aturan itu mensyaratkan para pelaku perjalanan jauh dengan moda transportasi darat dan penyeberangan dari dan ke Pulau Jawa dan Bali wajib menunjukkan kartu vaksin minimal dosis pertama 
dan surat keterangan hasil RT-PCR maksimal 3x24 jam atau antigen maksimal 1x24 jam sebelum perjalanan. Menurutnya, syarat itu membingungkan masyarakat. Dia 
berkata, pemerintah sebaiknya mengeluarkan aturan larangan mudik jika ingin membatasi pergerakan masyarakat di momentum libur Natal 2021 dan Tahun Baru 2022. "Seiring rencana pemerintah menghapus tes PCR di Jawa-Bali dan cukup tes antigen, saya minta sebaiknya SE Kemenhub ini dicabut saja. Hanya membingungkan masyarakat dan tidak efektif di lapangan," ucap Irwan.  Sebelumnya, Juru Bicara Menteri Koordinator Bidang Kemaritiman dan Investasi (Menko Marves) Luhut Binsar Pandjaitan, Jodi Mahardi, meluruskan isu soal dugaan Luhut berbisnis tes PCR sejak awal pandemi. Jodi membantah kabar Luhut ikut mendirikan PT Genomik Solidaritas Indonesia (GSI) untuk bisnis tes PCR. Dia hanya berdalih bahwa Luhut hanya mendorong pihak swasta yang hendak membantu penanganan pandemi. "Tidak ada maksud bisnis dalam partisipasi Toba Sejahtera di GSI, apalagi Pak Luhut 
sendiri selama ini juga selalu menyuarakan agar harga tes PCR ini bisa terus diturunkan sehingga menjadi semakin terjangkau buat masyarakat," kata Jodi lewat pesan singkat kepada CNNIndonesia.com, Senin (1/11). ', 'Pemerintah mencatat total distribusi vaksin mencapai 235.598.924 dosis sepanjang\xa0periode Januari - Oktober 2021. Juru Bicara Vaksinasi Covid-19 Kementerian Kesehatan, Siti 
Nadia Tarmizi menuturkan, varian jenis vaksin yang didistribusikan antara lain CoronaVac, Covid-19 Bio Farma, AstraZeneca, Moderna, Sinopharm, Janssen dan Pfizer. Nadia memaparkan distribusi vaksin di Indonesia akan terus bertambah seiring pemerintah kembali menerima kedatangan vaksin Covid-19 pada Jumat (1/11), sebanyak 4 juta dosis vaksin Sinovac. Kedatangan vaksin tahap ke-110 ini semakin memperkuat ketersediaan vaksin di tanah air sebagai upaya percepatan dan 
perluasan program vaksinasi nasional. "Dengan masuknya 4 juta dosis vaksin Sinovac ini, maka total jumlah vaksin yang telah mendarat di Indonesia mencapai 317.494.660 dosis, baik dalam bentuk vaksin jadi maupun bahan baku atau bulk," 
kata Nadia. Nadia menegaskan bahwa dengan kedatangan vaksin terbaru ini, pemerintah memastikan ketersediaan vaksin di Indonesia aman dan mencukupi. Menurutnya, penguatan stok vaksin akan sangat berkontribusi dalam mengoptimalkan upaya percepatan dan perluasan program vaksinasi nasional. Namun, ia menekankan, program vaksinasi perlu dukungan penuh dari masyarakat sebagai pelaku sekaligus 
penerima manfaat upaya proteksi kesehatan. Oleh karena itu, pemerintah meminta masyarakat yang belum mendapatkan vaksin segera melakukan vaksinasi di sentra vaksinasi atau fasilitas kesehatan terdekat. "Bagi yang sudah melengkapi vaksinasi, mari kita dorong dan bantu keluarga, kerabat, tetangga sekitar kita untuk segera divaksinasi. Mari kita juga sampaikan informasi yang benar terkait vaksinasi, agar masyarakat terhindar dari hoaks yang merugikan," tutur Nadia. Dia memaparkan selain memberikan jaminan ketersediaan stok vaksin, upaya edukasi kepada masyarakat, khususnya bagi mereka yang masih ragu dan enggan untuk divaksinasi, juga sangat penting dilakukan dalam rangka percepatan vaksinasi. "Kami tegaskan sekali lagi, seluruh vaksin Covid-19 yang digunakan di Indonesia 
aman dan berkhasiat, sudah mendapatkan izin BPOM (Badan Pengawas Obat dan Makanan)," kata Nadia. Sebagai informasi, berikut rincian detail distribusi vaksin selama Januari - Oktober 2021 yang mencapai 235.598.924 dosis tersebut: ● CoronaVac 1 ds : 3 juta● CoronaVac 2 ds (melalui Kontrak Pembelian) : 49.568.476● CoronaVac 1 ds (melalui Hibah) : 10,723,080● CoronaVac 2 ds (melalui Hibah dari RRT) : 1,999,376● Covid-19 Bio Farma : 121,091,300● AstraZeneca (melalui Covax, B2B, dan Hibah) : 28.527.224● Moderna : 8.000.160● Sinopharm (Hibah dari 
Arab Saudi) : 749.502● Sinopharm RC (Hibah dari RRT ) 2 ds / vial : 170 ribu● 
Janssen : 450.020● Pfizer : 18.104.580 ']

As mentioned by the other, it is working and there is no error thrown.正如另一个所提到的,它正在工作并且没有抛出错误。 To avoid such errors in case there no element were you can get text from just check like:为了避免在没有element情况下出现此类错误,您可以从以下检查中获取文本:

title = cont.h1.get_text(strip=True) if cont.h1 else 'no title'

Example例子

from bs4 import BeautifulSoup
import requests

data = []

links = ['https://www.cnnindonesia.com/tv/20211101202542-407-715220/video-20-november-tiongkok-vaksinasi-anak-usia-3-11-tahun', 
        'https://www.cnnindonesia.com/nasional/20211101192825-32-715200/demokrat-sindir-menteri-jokowi-jadi-marketing-bisnis-pcr', 
        'https://www.cnnindonesia.com/nasional/20211101210153-25-715231/indonesia-distribusikan-2355-juta-dosis-vaksin-sepanjang-2021']

for link in links:
    url = requests.get(link)
    soup = BeautifulSoup(url.text, 'lxml')
    cont = soup.find('div', class_='content_detail')
    title = cont.h1.get_text(strip=True) if cont.h1 else 'no title'
    date = cont.find('div', class_='date').text.strip() if cont.find('div', class_='date') else 'no date'
    content = ' '.join([p.get_text(strip=True) for p in cont.select('p')]) if cont.p else 'no content'


    data.append({
        'title':title,
        'date':date,
        'content':content
    })    

        
data

Hint: Dont deal with this separate lists, use dicts.提示:不要处理这个单独的列表,使用字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 BeautifulSoup“AttributeError: 'NoneType' 对象没有属性 'text'” - BeautifulSoup "AttributeError: 'NoneType' object has no attribute 'text'" BeautifulSoup AttributeError: 'NoneType' 对象没有属性 'text' - BeautifulSoup AttributeError: 'NoneType' object has no attribute 'text' AttributeError:“NoneType”对象没有属性“文本”-Beautifulsoup - AttributeError: 'NoneType' object has no attribute 'text' - Beautifulsoup BeautifulSoup: AttributeError: 'NoneType' 对象没有属性 'text' - BeautifulSoup: AttributeError: 'NoneType' object has no attribute 'text' AttributeError: 'NoneType' object 在使用 BeautifulSoup 时没有属性 'text' - AttributeError: 'NoneType' object has no attribute 'text' when using BeautifulSoup AttributeError: 'NoneType' object 没有属性 'text' BeautifulSoup 解析 - AttributeError: 'NoneType' object has no attribute 'text' BeautifulSoup Parsing AttributeError: 'NoneType' object 没有属性 'text' - BeautifulSoup 到 CSV - AttributeError: 'NoneType' object has no attribute 'text' - BeautifulSoup to CSV AttributeError:'NoneType'对象没有属性'text'-Python,BeautifulSoup错误 - AttributeError: 'NoneType' object has no attribute 'text' - Python , BeautifulSoup Error AttributeError:'NoneType'对象没有属性'text'beautifulsoup python - AttributeError: 'NoneType' object has no attribute 'text' beautifulsoup python AttributeError:“ NoneType”对象在具有beautifulsoup的Python中没有属性*** - AttributeError: 'NoneType' object has no attribute *** in Python with beautifulsoup
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM