硒刮除

时间:2020-05-08 05:52:27

标签: python selenium

我正试图提出一种在Zillow上搜刮房屋信息的方法,并且我目前正在使用xpath来查看诸如租金,本金和抵押成本,保险成本之类的数据。

我能够使用xpath查找信息,但我想使其自动并将其放入for循环中,但是我意识到,当我使用xpath时,并非每个清单的所有数据都具有相同的xpath信息。对于某些列表或div,则关闭1。请参阅下面的代码了解我的意思。如何获得更具体的信息?有没有一种方法可以查找“本金和利息”之类的字符串,然后选择下一个值,即我要查找的数值?

可用于一个列表:

driver.find_element_by_xpath(“ / html / body / div [1] / div [6] / div / div [1] / div [1] / div [1] / ul / li [1] / article / div [1] / div [2] / div“)

其他列表将包含以下内容:

driver.find_element_by_xpath(“ / html / body / div [1] / div [6] / div / div [1] / div [1] / div [2] / ul / li [1] / article / div [1] / div [2] / div“)

2 个答案:

答案 0 :(得分:0)

使用xpath选择多个元素不是一个好主意。您可以查看“ css选择器”。使用它,您可以获得类似的元素。

答案 1 :(得分:0)

您使用的xpath特定于第一个清单的元素。为了能够访问每个清单的元素,您将需要使用xpaths来帮助您访问每个清单的元素:

import pandas as pd    
from selenium import webdriver

我搜索了曼哈顿的待售房源,并获得了以下网址 url =“ https://www.zillow.com/homes/Manhattan,-New-York,-NY_rb/

要求硒在Chrome中打开以上链接

driver = webdriver.Chrome()
driver.get(url)

我将鼠标悬停在其中一个房屋列表上,然后单击“检查”。这将打开HTML代码,并突出显示我正在检查的项目。我注意到具有“ list-card-info”类的元素包含我们所需房屋的所有信息。因此,我们的策略是为每个房屋访问具有“ list-card-info”类的元素。因此,使用以下代码,我将所有这样的HTML块保存在house_cards变量中

house_cards = driver.find_elements_by_class_name("list-card-info")

house_cards中有40个元素,即每个房子一个(每个页面列出了40个房子)

我遍历这40所房屋中的每座,并提取所需的信息。请注意,我现在使用的xpath特定于“ list-card-info”元素中的元素。我将此信息保存在熊猫数据报中。

address = []
price = []
bedrooms = []
baths = []
sq_ft = []

for house in house_cards:
    address.append(house.find_element_by_class_name("list-card-addr").text)
    price.append(house.find_element_by_class_name("list-card-price").text)
    bedrooms.append(house.find_element_by_xpath('.//div[@class="list-card-heading"]/ul[@class="list-card-details"]/li[1]').text)
    baths.append(house.find_element_by_xpath('.//div[@class="list-card-heading"]/ul[@class="list-card-details"]/li[2]').text)
    sq_ft.append(house.find_element_by_xpath('.//div[@class="list-card-heading"]/ul[@class="list-card-details"]/li[3]').text)
driver.quit()



# print(address, price,bedrooms,baths, sq_ft)
Manahattan_listings = pd.DataFrame({"address":address,
                                    "bedrooms": bedrooms,
                                    "baths":baths,
                                    "sq_ft":sq_ft,
                                    "price":price},)

pandas dataframe output

现在,要从更多页面(例如page2,page 3等)中提取信息,您可以循环浏览网站页面,即继续修改您的URL并继续提取信息

快乐报废!