AttributeError:“NoneType”对象没有“find\u all”Beautifulsoup属性

2024-10-04 03:23:19 发布

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

我想通过这个环节来获取房价:https://www.leboncoin.fr/ventes_immobilieres/offres/ile_de_france/p-2/

我需要知道我的程序出了什么问题?在

我的计划:

import csv
import requests
from bs4 import BeautifulSoup

with open("bc.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.leboncoin.fr/ventes_immobilieres/offres/ile_de_france/p-%s/" % i
        soup = BeautifulSoup(requests.get(url).text, "html.parser")
        repo = soup.find(class_="undefined")
        for repo in repo.find_all("li", attrs={"itemscope itemtype": "http://schema.org/Offer"}):
            prix = repo.find("span", {"itemprop": "priceCurrency"})
            prix = prix.text if prix else ""
            writer.writerow([prix])

我得到这个错误:

^{pr2}$

Tags: csvhttpsimportwwwrepodefrfind
3条回答

硒的阻断和使用已经被涵盖。我将展示一种方法,以一种很好的json格式获取所有列表,您可以轻松地提取信息。如果使用selenium访问每个页面,则可以使用regex提取页面上的所有列表信息并传递给json.loads要生成json对象example here,您可以轻松地解析每个列表的所有信息

^{1}$

正则表达式说明:

试试看here

您试图搜索requests返回的数据中不存在的内容。在

当您选中requests.get(url).text时,您可能会看到类似于:

^{1}$

导致None被赋给变量repo而解释器却抱怨None类型的对象不存在属性{}。在

所以基本上,在开始处理之前,你需要确保你有正确的数据。正如KunduK在他的回答中建议的那样,使用ChromeDriver就可以得到数据而不会被阻塞。你可以从http://chromedriver.chromium.org/得到ChromeDriver

在这里,JavaScripts呈现到佩奇。你可以同时使用硒和靓汤来获得想要的产量。在

^{1}$

相关问题 更多 >