Python bs4 Scraping,如何在列表中找到某个类并跳过但scrape res

2024-10-04 03:16:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为此挣扎了两天了。 有一个名为“unCheck”的类,我不想将其导入csv。我尝试了一个IF循环和几乎所有我想到的东西,但我知道我跳过了一些东西

另外,脚本正在生成一个文件,但我并没有将所有内容都扩展到正确的格式,例如,标题下的标题、描述下的描述等。 我在那里知道一些东西,但似乎找不到:/

忘了提一下,这是链接我试图刮(使用csv的所有链接上的网站存在)https://www.interhome.com/spain/barcelona/barcelona/apartment-placa-catalunya-rdauniversidad-es9510.90.1/?q=apartment%2bpla%25c3%25a7a%2bcatalunya%252frda.universidad%2b%25e2%2598%2585%25e2%2598%2585%25e2%2598%2585%25e2%2598%2585%252c%2bbarcelona

当你滚动时,你可以看到设施

import requests
import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

contents = []
with open('accomodation.csv', 'r') as csvf:
    urls = csv.reader(csvf)
    for url in urls:
        contents.append(url)


for url in contents:
    page = urlopen(url[0]).read()
    soup = BeautifulSoup(page, 'html.parser')
    accomodation = soup.findAll('div', {'class' : 'modAccommodationDetail'})
    file_path = 'scraping.csv'
    with open(file_path, "a") as csvf:
        accomodation = soup.findAll('div', {'class' : 'modAccommodationDetail'})
        for acom in accomodation:
            title = acom.findAll('h1' , {'class' : 'base'})[0].text
            print(title)
            rooms = acom.findAll('div', {'class' : 'personsRooms'})[0].text
            description = soup.findAll('div', {'class' : 'richtext'})
            paragraph1 = acom.findAll('div', {'class' : 'richtext'})[0].text
            print(paragraph1)
            facilities1 = acom.findAll('div', {'class' : 'attr c_third'})[0].text
            for unchecked in acom.find('ul', {'class' : 'attributelist'}):   #im trying to make an IF loop to find it and after that skip just the one with that atribute "unCheck"
                if unchecked.find('li', {'class' : 'unCheck'}:
                    continue
                else:
                    print(facilities1)
            facilities2 = acom.findAll('div', {'class' : 'attr c_third'})[1].text
            print(facilities2)
            distances = acom.findAll('div', {'class' : 'attr c_third'})[2].text
            print(distances)
            gallery = acom.find('ul', {'class' : 'object-thumb-list'}).findAll('a')
            for link in gallery:
                print(link['href'])
            print('\n')
            page_line = '{title}\n{rooms}\n{description}\n{facilities1}\n{facilities2}\n{distances}\n{gallery}\n\n'.format(
                title = title,
                rooms = rooms,
                description = description,
                facilities1 = facilities1,
                facilities2 = facilities2,
                distances = distances,
                gallery = link['href']
            )
        csvf.write(page_line)

Tags: csvtextinimportdivfortitleclass
1条回答
网友
1楼 · 发布于 2024-10-04 03:16:08

您可以忽略列表中具有类的项:

print([li.text for li in acom.find('div', {'class' : 'attr c_third'}).findAll('li') if not li.has_attr('class')])

输出应为:

[u'TV', u'Washing machine', u'Dishwasher', u'Air-conditioning', u'Internet (WiFi)']

相关问题 更多 >