Python bs4 抓取,如何在列表中查找某些类并跳过但抓取休息



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

此外,脚本正在制作一个文件,但我没有将所有内容都传播成正确的格式,例如,标题下的标题,描述下的描述等。 我知道我在那里的一些东西,但我似乎找不到它:/

忘了提到这是链接m试图抓取(对网站上存在的所有链接使用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}nn'.format(
title = title,
rooms = rooms,
description = description,
facilities1 = facilities1,
facilities2 = facilities2,
distances = distances,
gallery = link['href']
)
csvf.write(page_line)

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

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

输出应为:

[u'电视', u'洗衣机', u'洗碗机', u'

空调', u'互联网 (WiFi(']

最新更新