我是编程新手,也许我问的问题非常简单,但我正在尝试抓取一个房地产网站 - 它有 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”。
你在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)
您的代码存在一些问题:
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))