通过网页循环访问webscrape数据

时间:2017-06-08 17:14:15

标签: python selenium beautifulsoup

我试图遍历Zillow页面并提取数据。我知道在每次迭代后,URL都会使用新的页码进行更新,但提取的数据就像URL仍在第1页一样。

import selenium
from selenium import webdriver
import requests
from bs4 import BeautifulSoup
import pandas as pd

next_page='https://www.zillow.com/romeo-mi-48065/real-estate-agent-reviews/'

num_data1=pd.DataFrame(columns=['name','number'])

browser=webdriver.Chrome()
browser.get('https://www.zillow.com/romeo-mi-48065/real-estate-agent-reviews/')

while True:

    page=requests.get(next_page)

    contents=page.content

    soup = BeautifulSoup(contents, 'html.parser')

    number_p=soup.find_all('p', attrs={'class':'ldb-phone-number'},text=True)
    name_p=soup.find_all('p', attrs={'class':'ldb-contact-name'},text=True)

    number_p=pd.DataFrame(number_p,columns=['number'])
    name_p=pd.DataFrame(name_p,columns=['name'])

    num_data=number_p['number'].apply(lambda x: x.text.strip())
    nam_data=name_p['name'].apply(lambda x: x.text.strip())

    number_df=pd.DataFrame(num_data,columns=['number'])
    name_df=pd.DataFrame(nam_data,columns=['name'])

    num_data0=pd.concat([number_df,name_df],axis=1)

    num_data1=num_data1.append(num_data0)

        try:

            button=browser.find_element_by_css_selector('.zsg-pagination>li.zsg-pagination-next>a').click()
            next_page=str(browser.current_url)

        except IndexError:

            break

2 个答案:

答案 0 :(得分:0)

为什么不让您的生活更轻松并使用Zillow API而不是刮痧? (你甚至有权刮掉他们的网站吗?)

答案 1 :(得分:0)

page=requests.get(next_page)替换为page = browser.page_source

基本上发生的事情是你要进入Chrome的下一页,然后尝试加载该页面的网址,其中的请求会被Zillow重定向回第一页(可能是因为它没有Cookie或适当的请求标题)。