网页抓取循环在第二页失败

时间:2021-04-19 22:06:52

标签: python pandas selenium beautifulsoup

我正在尝试解析网站中的表格,但在页面更改时无法保存表格。此外,换页器不响应循环。我有这个代码:

import time
import requests
import pandas

import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import json


driver = webdriver.Chrome('C:\DRIVERS\chromedriver.exe')
driver.get('https://www.remax.pt/comprar?searchQueryState={%22regionName%22:%22%22,%22businessType%22:1,%22listingClass%22:1,%22page%22:1,%22sort%22:{%22fieldToSort%22:%22ContractDate%22,%22order%22:1},%22mapIsOpen%22:false}')
driver.maximize_window()
driver.implicitly_wait(5)
wait = WebDriverWait(driver, 10)
cookies = driver.find_element_by_id('rcc-decline-button')
cookies.click()

element_list = []
for j in range (1,2569):
    try:
        for i in range(1,40,2):
            link = driver.find_element_by_xpath("(//div[@class='listing-search-searchdetails-component'])[{0}]".format(i))
            link.click()
            try:
                detalhes = driver.find_element_by_id('details')
                preço = driver.find_element_by_id('listing-price')
                tipo = driver.find_element_by_id('listing-title')
                freguesia = driver.find_element_by_xpath('//h5[@class="listing-address"]')
                imoveis = [detalhes.text, preço.text, tipo.text, freguesia.text]
                element_list.append(imoveis)
            finally:
                driver.back()
    finally:
        wait.until(EC.element_to_be_clickable((By.XPATH,"//a[@class='page-link'][.//span[.='Next']]"))).click()

请注意,内循环在第一页中起作用,但在第二页中不起作用。外循环甚至没有开始(即它只更改页面一次)

2 个答案:

答案 0 :(得分:1)

与在此处使用 Selenium 相比,通过 api 获取数据会容易得多。您还可以调整每个请求返回的大小,但我注意到在某些时候它不会返回任何内容。有了它,它看起来限制了您可以返回的数量是 10,000 个列表(即使在网站上,它也不会返回超过第 500 页的任何列表:

*注意,如果您更改 size=10000,您可以在 1 个请求中获得全部。

import requests
import math
import pandas as pd

url = 'https://www.remax.pt/Api/Listing/MultiMatchSearch'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36'}
payload = {"filters":
           [{"field":"BusinessTypeID","value":"1","type":0},
            {"field":"ListingClassID","value":"1","type":0}],
           "sort":{"fieldToSort":"ContractDate","order":1}}
size=10000
query_payload = {
'page':0,
'searchValue':'',
'size':size}

    
jsonData = requests.post(url, params=query_payload,json=payload).json()
total_pages =  math.ceil(jsonData['total']/ size) 

element_list = []
for page in range(0,total_pages+1):
    if page != 0:
        query_payload.update({'page':page})
        jsonData = requests.post(url, params=query_payload,json=payload, headers=headers).json()
        
    if len(jsonData['results']) == 0:
           break
    element_list += jsonData['results']
    print('Collected: Page %s: %s listings' %(page+1, len(jsonData['results'])))
    
listing_df = pd.DataFrame(element_list)    


rows = []
listing_ids = list(listing_df['listingTitle'])
for idx, listing_id in enumerate(listing_ids):
    listing_url = 'https://s.maxwork.pt/site/static/9/listings/details/%s.html' %listing_id
    response = requests.get(listing_url, headers=headers)
    temp_details = pd.read_html(response.text)[0]
    
    alpha = temp_details.iloc[:,[0,1]]
    beta = temp_details.iloc[:,[2,3]]
    beta.columns = alpha.columns
    details = pd.concat([alpha,beta])
    details['listingTitle'] = listing_id
    details = details.pivot(index='listingTitle',columns=0,values=1).reset_index(drop=False)
    rows += details.to_dict(orient='records')
    
    print('%s of %s' %(idx+1,len(listing_ids)))
    
listing_desc_df = pd.DataFrame(rows)

df = listing_df.merge(listing_desc_df, how='left', on=['listingTitle'])

输出:

print(df.head(50).to_string())
      listingTitle autocompleteListingTitle  isSold                                                     coordinates  longitude   latitude  listingPrice listingPriceText  listingTypeID  isSpecial         regionName1  region2ID          regionName2  region3ID                                                                regionName3 Ano de construção Eficiência energética Elevador Estacionamento      Piso Quartos Total do lote m2 WCs Área Bruta m2 Área Útil m2
0     120241178-64             120241178-64   False  {'latitude': 41.5563011169434, 'longitude': -8.42594718933105}  -8.425947  41.556301      120000.0        120 000 €              1      False               Braga        406                Braga     137539                                                                São Vicente              1996                     D      Sim         1 Lug.  1º Andar       1               --   1            64           60
1    120251173-297            120251173-297   False  {'latitude': 39.7427291870117, 'longitude': -8.81297206878662}  -8.812972  39.742729       77000.0         77 000 €              1      False              Leiria        523               Leiria    7881422                                                          Marrazes e Barosa              1983                     C      Não            Não  2º Andar       3              102   2            90           90
2   120511052-2321           120511052-2321   False  {'latitude': 38.7048034667969, 'longitude': -9.21482944488525}  -9.214829  38.704803     1500000.0      1 500 000 €             11      False              Lisboa        537               Lisboa    7881111                                                                      Belém              1988                     D      Não         2 Lug.        --      10               --   6           300          260
3    120521374-517            120521374-517   False  {'latitude': 38.7670211791992, 'longitude': -9.23021984100342}  -9.230220  38.767021       56000.0         56 000 €              1      False              Lisboa        532              Amadora    7881439                                                               Mina de Água              1981                     C      Sim            Não       C/V       0               --   1            30           26
4     120531261-11             120531261-11   False                                                            None        NaN        NaN      110000.0        110 000 €              1      False              Lisboa        542               Sintra    7881760                                                         Cacém e São Marcos              1995                     C      Sim            Não  3º Andar       1               --   1            65           54
5    120611192-931            120611192-931   False  {'latitude': 38.8063354492188, 'longitude': -9.09916305541992}  -9.099163  38.806335      165000.0        165 000 €              1      False              Lisboa        538               Loures    7881615                          Santa Iria de Azoia, São João da Talha e Bobadela              2000                     D      Não         1 Lug.  1º Andar       1               --   1            72           69
6   120611194-1600           120611194-1600   False  {'latitude': 38.7786903381348, 'longitude': -9.17241954803467}  -9.172420  38.778690      600000.0        600 000 €              1      False              Lisboa        537               Lisboa     138643                                                                     Lumiar              2014                    B-      Sim         2 Lug.       R/C       3               --   2           190          125
7      120611837-4              120611837-4   False  {'latitude': 38.8439788818359, 'longitude': -9.08877372741699}  -9.088774  38.843979      182000.0        182 000 €              1      False              Lisboa        538               Loures    7881615                          Santa Iria de Azoia, São João da Talha e Bobadela              1993                     C      Sim            Não  2º Andar       2               --   1            88           67
8     120611853-32             120611853-32   False  {'latitude': 38.6320686340332, 'longitude': -9.09872627258301}  -9.098726  38.632069      100000.0        100 000 €              1      False             Setúbal        608               Seixal    7881764                                   Seixal, Arrentela e Aldeia de Paio Pires              1964                     C      Não            Não  1º Andar       2               --   1            51           46
9      120612113-4              120612113-4   False  {'latitude': 38.7784767150879, 'longitude': -9.24263477325439}  -9.242635  38.778477      255000.0        255 000 €              1      False              Lisboa        532              Amadora    7881439                                                               Mina de Água              2006                    B-      Sim         2 Lug.       R/C       2               --   1           167           86
10     120612113-5              120612113-5   False  {'latitude': 38.7622833251953, 'longitude': -9.23819446563721}  -9.238194  38.762283      210000.0        210 000 €              1      False              Lisboa        532              Amadora    7881294                                                    Falagueira - Venda Nova              2006                     C      Sim         1 Lug.       R/C       1               --   1           135           97
11     120612160-2              120612160-2   False  {'latitude': 38.6261711120605, 'longitude': -9.15865516662598}  -9.158655  38.626171      279000.0        279 000 €             11      False             Setúbal        608               Seixal     140194                                                                   Corroios              1990                     E      Não         1 Lug.        --       4               --   3           240          127
12    120631511-30             120631511-30   False                                                            None        NaN        NaN      110000.0        110 000 €              1      False             Setúbal        608               Seixal    7881764                                   Seixal, Arrentela e Aldeia de Paio Pires              1977                     E      Não            Não  3º Andar       3              658   1            80           80
13     120631664-9              120631664-9   False   {'latitude': 38.531177520752, 'longitude': -8.87638187408447}  -8.876382  38.531178      139900.0        139 900 €              1      False             Setúbal        610              Setúbal     140245                                                              São Sebastião              1972                     D      Sim            Não  2º Andar       2               --   2            75           75
14     120691205-1              120691205-1   False  {'latitude': 39.4176254272461, 'longitude': -9.13229751586914}  -9.132298  39.417625      143000.0        143 000 €             21      False              Leiria        520     Caldas da Rainha    7881728                                                   Tornada e Salir do Porto              1957                    NC      Não            Não        --      --             3750   0          3750           --
15    120781153-38             120781153-38   False  {'latitude': 41.2283668518066, 'longitude': -8.64142227172852}  -8.641422  41.228367      175000.0        175 000 €              1      False               Porto        568           Matosinhos    7881259                                          Custóias, Leça do Balio e Guifões              2002                     D      Sim         1 Lug.       R/C       2              133   2           108          108
16     120781302-3              120781302-3   False  {'latitude': 41.1931915283203, 'longitude': -8.61899375915527}  -8.618994  41.193192      150000.0        150 000 €              1      False               Porto        568           Matosinhos    7881651                                    São Mamede de Infesta e Senhora da Hora              2001                     C      Sim         1 Lug.  2º Andar       2               --   1           106           86
17    120781358-40             120781358-40   False   {'latitude': 41.153190612793, 'longitude': -8.50793170928955}  -8.507932  41.153191      340000.0        340 000 €             11      False               Porto        564             Gondomar    7881295                                               Fânzeres e São Pedro da Cova              2021                    NC      Não         2 Lug.        --       3              215   3           252          252
18    120781358-41             120781358-41   False   {'latitude': 41.153190612793, 'longitude': -8.50793170928955}  -8.507932  41.153191      340000.0        340 000 €             11      False               Porto        564             Gondomar    7881295                                               Fânzeres e São Pedro da Cova              2021                    NC      Não         2 Lug.        --       3              215   3           252          252
19  120961001-2485           120961001-2485   False  {'latitude': 37.7316856384277, 'longitude': -25.3059501647949} -25.305950  37.731686      195000.0        195 000 €             11      False  Ilha de São Miguel        505             Povoação     283094                                                             Ribeira Quente              1937                    NC      Não            Não        --       3              241   1           139           72
20   120991305-222            120991305-222   False  {'latitude': 38.7449226379395, 'longitude': -9.17739295959473}  -9.177393  38.744923      221000.0        221 000 €              1      False              Lisboa        537               Lisboa     138664                                                    São Domingos de Benfica              1962                     C      Sim            Não  2º Andar       2               --   1            64           64
21   120992059-967            120992059-967   False  {'latitude': 38.8122749328613, 'longitude': -9.18933200836182}  -9.189332  38.812275      255000.0        255 000 €              1      False              Lisboa        965             Odivelas    7881567                                                           Ramada e Caneças              2009                     C      Sim         1 Lug.  3º Andar       2               --   2            86           86
22   120992059-968            120992059-968   False  {'latitude': 38.7304840087891, 'longitude': -9.15713500976563}  -9.157135  38.730484     1505000.0      1 505 000 €              1      False              Lisboa        537               Lisboa    7881080                                                             Avenidas Novas              2020                     E      Sim            Não       R/C       2               --   3           229          229
23   120992059-969            120992059-969   False  {'latitude': 38.7304840087891, 'longitude': -9.15713500976563}  -9.157135  38.730484     1420000.0      1 420 000 €              1      False              Lisboa        537               Lisboa    7881080                                                             Avenidas Novas              2020                     E      Sim            Não       R/C       2               --   3           222          222
24   120992059-970            120992059-970   False   {'latitude': 38.7265014648438, 'longitude': -9.1189022064209}  -9.118902  38.726501      180000.0        180 000 €              1      False              Lisboa        537               Lisboa     138650                                                            Penha de França              1988                     D      Sim            Não  2º Andar       1               --   1            36           36
25   121011219-134            121011219-134   False  {'latitude': 38.7962646484375, 'longitude': -9.17248916625977}  -9.172489  38.796265      195000.0        195 000 €              1      False              Lisboa        965             Odivelas     175361                                                                   Odivelas              1981                     D      Sim            Não  3º Andar       1              483   1            56           56
26   121121151-113            121121151-113   False  {'latitude': 38.8020095825195, 'longitude': -9.35227012634277}  -9.352270  38.802010      124000.0        124 000 €              1      False              Lisboa        542               Sintra     140266                                                      Algueirão-Mem Martins              1999                     C      Sim            Não  3º Andar       2               --   1            71           71
27     121161163-5              121161163-5   False  {'latitude': 38.8054885864258, 'longitude': -9.18441772460938}  -9.184418  38.805489      275000.0        275 000 €              1      False              Lisboa        965             Odivelas    7881567                                                           Ramada e Caneças              1999                     C      Sim         2 Lug.  3º Andar       3               --   2           108          100
28   121291134-215            121291134-215   False  {'latitude': 38.7944717407227, 'longitude': -9.19003963470459}  -9.190040  38.794472      195000.0        195 000 €              1      False              Lisboa        965             Odivelas     175361                                                                   Odivelas              2007                     C      Sim            Não       R/C       1               --   1            91           91
29    121291340-14             121291340-14   False  {'latitude': 39.0450019836426, 'longitude': -9.07592582702637}  -9.075926  39.045002       25000.0         25 000 €             21      False              Lisboa        531             Alenquer     136964                                                                    Carnota               NaN                    NC      Não            Não        --      --               --   0          2720         2720
30    121701349-66             121701349-66   False  {'latitude': 38.7021827697754, 'longitude': -9.23928546905518}  -9.239285  38.702183      199000.0        199 000 €              1      False              Lisboa        541               Oeiras    7881007                               Algés, Linda-a-Velha e Cruz Quebrada-Dafundo              1973                     D      Não            Não  1º Andar       2               --   1            73           65
31    121701366-88             121701366-88   False   {'latitude': 38.7669792175293, 'longitude': -9.2309045791626}  -9.230905  38.766979       85000.0         85 000 €             21      False              Lisboa        532              Amadora    7881439                                                               Mina de Água               NaN                    NC      Não        3+ Lug.        --      --               --   0           298           --
32   121901124-824            121901124-824   False  {'latitude': 38.9743232727051, 'longitude': -9.25524234771729}  -9.255242  38.974323      190000.0        190 000 €             11      False              Lisboa        540                Mafra    7881269                           Enxara do Bispo, Gradil e Vila Franca do Rosário              1951                     D      Não         1 Lug.        --       2             4749   3           368          368
33   121901144-140            121901144-140   False  {'latitude': 39.1354522705078, 'longitude': -9.30073642730713}  -9.300736  39.135452      189000.0        189 000 €             21      False              Lisboa        544        Torres Vedras    7880966                                                   A dos Cunhados e Maceira               NaN                    NC      Não            Não        --      --            37600   0         37600           --
34   121911089-381            121911089-381   False  {'latitude': 41.2636184692383, 'longitude': -8.32836818695068}  -8.328368  41.263618       65000.0         65 000 €             21      False               Porto        565              Lousada     138741                                                                  Nevogilde               NaN                    NC      Não            Não        --      --             1048   0          1048           --
35    121961781-19             121961781-19   False  {'latitude': 38.7633514404297, 'longitude': -9.23866081237793}  -9.238661  38.763351      125000.0        125 000 €              1      False              Lisboa        532              Amadora    7881439                                                               Mina de Água              1977                    NC      Não            Não  1º Andar       3               --   1            89           89
36   121981024-803            121981024-803   False  {'latitude': 38.9900207519531, 'longitude': -9.08186721801758}  -9.081867  38.990021      175000.0        175 000 €              1      False              Lisboa        533    Arruda dos Vinhos     137323                                                          Arruda dos Vinhos              1999                     D      Não         1 Lug.  3º Andar       3               --   2           121          175
37   121981024-804            121981024-804   False  {'latitude': 38.9046249389648, 'longitude': -9.04910373687744}  -9.049104  38.904625      120000.0        120 000 €              1      False              Lisboa        545  Vila Franca de Xira    7881029                                           Alverca do Ribatejo e Sobralinho              1995                     D      Não            Não  1º Andar       2               --   1            85           98
38   121981024-805            121981024-805   False  {'latitude': 38.8650970458984, 'longitude': -9.07480335235596}  -9.074803  38.865097      245000.0        245 000 €              1      False              Lisboa        545  Vila Franca de Xira    7881554                                        Póvoa de Santa Iria e Forte da Casa              2000                     D      Sim         1 Lug.  5º Andar       3               --   2           120          150
39   121981024-806            121981024-806   False  {'latitude': 38.8922805786133, 'longitude': -9.03994464874268}  -9.039945  38.892281      265000.0        265 000 €              1      False              Lisboa        545  Vila Franca de Xira    7881029                                           Alverca do Ribatejo e Sobralinho              1994                     D      Sim            Não  5º Andar       3               --   2           120          120
40   122031100-118            122031100-118   False  {'latitude': 40.6477584838867, 'longitude': -7.91024160385132}  -7.910242  40.647758      235000.0        235 000 €              1      False               Viseu        658                Viseu    7881845                                                                      Viseu              2017                     A      Sim         1 Lug.  4º Andar       3               --   0           136          126
41   122141231-184            122141231-184   False   {'latitude': 38.757698059082, 'longitude': -9.25005435943604}  -9.250054  38.757698       75000.0         75 000 €              1      False              Lisboa        542               Sintra    7881562                                                             Queluz e Belas              1987                     E      Sim            Não       R/C       0               --   0            44           44
42    122181417-24             122181417-24   False  {'latitude': 38.8192291259766, 'longitude': -9.41029834747314}  -9.410298  38.819229      547000.0        547 000 €             11      False              Lisboa        542               Sintra    7881695  Sintra (Santa Maria e São Miguel, São Martinho e São Pedro de Penaferrim)              2005                     C      Não        3+ Lug.        --       4              322   4           227          180
43    122181450-61             122181450-61   False  {'latitude': 38.7442321777344, 'longitude': -9.16665172576904}  -9.166652  38.744232      450000.0        450 000 €              1      False              Lisboa        537               Lisboa     138664                                                    São Domingos de Benfica              1987                     E      Sim         1 Lug.  8º Andar       2              119   2           102           80
44   122191187-136            122191187-136   False    {'latitude': 38.5499839782715, 'longitude': -8.877028465271}  -8.877028  38.549984      549000.0        549 000 €             11      False             Setúbal        610              Setúbal     140245                                                              São Sebastião              2021                     A      Não         1 Lug.        --       4              476   3           266          266
45   122211023-377            122211023-377   False  {'latitude': 41.2374954223633, 'longitude': -8.16340351104736}  -8.163404  41.237495       47500.0         47 500 €             21      False               Porto        567   Marco de Canaveses     138864                                                         Banho e Carvalhosa               NaN                    NC      Não            Não        --      --              763   0           150          150
46   122211023-378            122211023-378   False  {'latitude': 41.2399864196777, 'longitude': -8.16735172271729}  -8.167352  41.239986       90000.0         90 000 €             21      False               Porto        561             Amarante    8081909                                                                   Vila Meã               NaN                    NC      Não            Não        --      --             7650   0          7650           --
47    122541186-12             122541186-12   False   {'latitude': 40.921012878418, 'longitude': -8.43076705932617}  -8.430767  40.921013       71000.0         71 000 €              1      False              Aveiro        382  Oliveira de Azeméis     139316                                                                     Fajões              2003                     D      Não         1 Lug.       R/C       3               --   2           137          137
48    122541186-13             122541186-13   False   {'latitude': 40.921012878418, 'longitude': -8.43076705932617}  -8.430767  40.921013       67500.0         67 500 €              1      False              Aveiro        382  Oliveira de Azeméis     139316                                                                     Fajões              2003                     C      Não         1 Lug.       R/C       3               --   2           137          137
49    122541186-14             122541186-14   False   {'latitude': 40.921012878418, 'longitude': -8.43076705932617}  -8.430767  40.921013       71500.0         71 500 €              1      False              Aveiro        382  Oliveira de Azeméis     139316                                                                     Fajões              2003                     D      Não         1 Lug.  1º Andar       3               --   2           143          143

答案 1 :(得分:0)

请从下面的代码中得到一个想法。

Page_lists = driver.find_elements_by_xpath('/html/body/div[1]/div/div[1]/div/div[2]/div/div[2]/div/div[2]/div[1]/div/div')

element_list=[]
for list in Page_lists :
    print(list.text)
    time.sleep(2)
    list.click()
    time.sleep(1)
    detalhes = driver.find_element_by_id('details').text
    preço = driver.find_element_by_id('listing-price').text
    tipo = driver.find_element_by_id('listing-title').text
    freguesia = driver.find_element_by_xpath('//h5[@class="listing-address"]').text
    imoveis = [detalhes, preço, tipo, freguesia]
    print(imoveis)
    element_list.append(imoveis)
    driver.find_element_by_css_selector('body > div.fade.listing-details-desktop-component.modal.show > div > div > button').click()

print(element_list)