我正在尝试在此链接中抓取数据资源: https://www.pap.fr/annonce/ventes-maisons-
我只能从第一页抓取数据,所以我做了一个遍历所有页面但没有结果的循环。
有人可以告诉我程序有什么问题吗?
for num in range(0, 20):
url = str('https://www.pap.fr/annonce/ventes-maisons-' + str(num))
page = requests.get(url)
data = page.text
soup = BeautifulSoup(data, 'html.parser')
repo = soup.find(class_="search-results-list")
repo_list = repo.find_all(class_='search-list-item')
for repo in repo_list:
full_repo_name = repo.find('p').text.split('.')
Code_postal = full_repo_name[0].strip()
Description = full_repo_name[1].strip()
Prix = repo.find("span", {"class": "item-price"}).string
Nombre_pièces = repo.ul.li.string
x = repo.find('ul', class_="item-tags").find_all('li')[2]
print(repo.text.strip())
Surface = x.text.strip()
f.writerow([Prix, Code_postal, Description, Nombre_pièces, Surface])
答案 0 :(得分:1)
由于字段缺失/不一致,这有点棘手。您可以从这里开始,但是您可能需要稍微调整一下此脚本才能达到预期的输出:
import csv
import requests
from bs4 import BeautifulSoup
with open("out.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["prix", "code_postal", "description", "nombre_pieces", "surface"])
for i in range(1, 20):
url = "https://www.pap.fr/annonce/ventes-maisons-%s" % i
soup = BeautifulSoup(requests.get(url).text, "html.parser")
repo = soup.find(class_="search-results-list")
for repo in repo.find_all(class_="search-list-item"):
body = repo.find("p").text.split(".")
code_postal, description = body[0].strip(), body[1].strip()
prix = repo.find("span", {"class": "item-price"})
prix = prix.text if prix else ""
try:
nombre_pieces = repo.ul.li.text
except:
nombre_pieces = ""
try:
surface = repo.find("ul",class_="item-tags").find_all("li")[2].text.strip()
except:
surface = ""
writer.writerow([prix, code_postal, description, nombre_pieces, surface])
输出CSV摘录:
prix,code_postal,description,nombre_pieces,surface
550.000 €,Vaison-la-Romaine (84110),Entre Vaison la Romaine -région et Beaume de Venise,5 pièces,122 m2
350.000 €,La Selve (12170),"Demeure de prestige de 300 m² habitables en pierres de pays, au cœur de la campagne sud aveyronnaise, entièrement rénovée en 2004",8 pièces,300 m2
220.000 €,Labastide-d'Armagnac (40240),"Maison d'habitation du 17e siècle comprenant un rez-de-chaussée et deux étages, entièrement rénovée dans centre village de Labastide d'Armagnac, situé à 29 km est de Mont de Marsan (Landes)",8 pièces,226 m2
95.000 €,Courçon (17170),A 25 mn de La Rochelle,5 pièces,70 m2
1.249.000 €,Pibrac (31820),Dans un environnement exceptionnel avec accès direct à la forêt domaniale de Bouconne,7 pièces,540 m2
828.000 €,Bois-le-Roi (77590),"Superbe maison contemporaine 2010, sur terrain clos et paysager 1",7 pièces,220 m2
278.000 €,Villefranche-sur-Saône (69400),"Compagnie de Construction vous propose, sur la commune de Gleizé, un projet de construction sur une parcelle de terrain de 660 m², exposée Sud-Ouest, cette villa familiale de 80 m² habitables se compose d'un sejour",3 chambres>,Terrain : 662 m²
485.000 €,Valenciennes (59300),**Corps de ferme à 10 mn de Valenciennes (propriété individuelle)**,11 pièces,200 m2
185.000 €,Arrigny (51290),Propriété sur un terrain arboré de 3,9 pièces,241 m2
,Le Carré Jaurès,"OUVERTURE DE LA COMMERCIALISATION
Devenez enfin propriétaire de votre appartement neuf à Livry-Gargan !
De beaux appartements neufs et spacieux, du 2 au 4 pièces s’ouvrant sur un magnifique cœur
d’îlot où la nature",,
485.000 €,Flayosc (83780),"Maison 130m², (surface utile 167m²) centre village à pied, année de construction 1994 ,exposée sud-sud-est, sans vis-à-vis sur un terrain de 1427m² complanté d'oliviers, figuiers, lauriers roses",5 pièces,130 m2
335.000 €,Esclauzels (46090),"15 mn Cahors
5 km du village de Saint Géry
Terrain de 5724 m² clos, arboré et paysagé
Piscine au sel 11 x 4 avec volet roulant automatique solaire avec pool house
Maison 6 pièces de plain pied",6 pièces,145 m2
,Vous envisagez de vendre votre logement ? Notre outil vous permet d'obtenir une estimation gratuite et immédiate en se basant sur un grand volume de ventes réalisées au cours des derniers mois,,,
280.000 €,Rougé (44660),"Entre Bretagne et Pays de Loire, dans un hameau, loin de toute agitation urbaine, vous trouverez une vrai qualité de vie",6 pièces,130 m2
完整的CSV是248行,但看起来好像经常出现广告(通过检查邮政编码字段可以很容易地将其删除):