抓取时没有返回值? [Python]

问题描述 投票:0回答:2

我是编程新手,也许我问的问题非常简单,但我正在尝试抓取一个房地产网站 - 它有 38 页。在以前的版本中,我的代码仅返回第一页上的指定值。所以我添加了一个页面范围。我确实要求重新编辑,有人说“附加到页面循环中的列表,而不是在每次迭代中设置它”,但我不完全确定如何执行此操作或哪里出错了。有人可以帮我吗?我想在所有 38 页上返回“info = [价格,地址]”。

感谢您在网上帮助陌生人。

这是我的代码:

from bs4 import BeautifulSoup
import requests
for pages in range(1,38):
        url = requests.get("https://rah.co.uk/property_area/to-buy/{page}.html".format(page =pages))

        soup = BeautifulSoup(url.content, "lxml")
        list = soup.select("ct-div-block property-outer")
        lists = soup.select("ct-div-block property-outer")


for lis in lists:
        price = lis.find("li", class_ ="ct-code-block property-price").text
        address = lis.find("li", class_ ="ct-text-block property-name").text
        info = [price, address]
        print(info)


期望返回 38 个页面中的所有值,因此它在多个页面上循环“ct-div-block property-outer”。

python loops append
2个回答
0
投票

你在reddit上得到的答案是正确的。变化如下:

from bs4 import BeautifulSoup
import requests

lists = []  # ********************************************** ADDED LINE
for pages in range(1,38):
        url = requests.get("https://rah.co.uk/property_area/to-buy/{page}.html".format(page =pages))

        soup = BeautifulSoup(url.content, "lxml")
        # ********************************************** START CHANGED LINES
        relevant_content = soup.select("ct-div-block property-outer")
        lists.append(relevant_content)
        # ********************************************** END CHANGED LINES


for lis in lists:
        price = lis.find("li", class_="ct-code-block property-price").text
        address = lis.find("li", class_="ct-text-block property-name").text
        info = [price, address]
        print(info)

0
投票

您的代码存在一些问题:

  • 您查询的URL(格式字符串)不正确。它缺少“页面”路径参数。例如。
    https://rah.co.uk/property_area/to-buy/1.html
    指向错误处理页面。相反,您想要类似
    https://rah.co.uk/property_area/to-buy/page/5
    的东西。
  • 格式字符串放入了错误的变量。当它应该是
    pages
    时,你却得到了
    page
    。实际上你的内容是正确的,但你应该将其重命名为
    page
    ,这样更清楚其意图是什么。
  • 在另一行中,您将保留关键字
    list
    分配给 BeautifulSoup 选择器结果。您应该将其重命名为类似
    property_list
    的名称。

所以我会将变量

url
更改为如下所示:

for page in range(1,38):
  url = requests.get("https://rah.co.uk/property_area/to-buy/page/{page}".format(page=page))
© www.soinside.com 2019 - 2024. All rights reserved.