【问题标题】:Scraping: scrape multiple pages in looping (Beautifulsoup)抓取:循环抓取多个页面(Beautifulsoup)
【发布时间】:2022-01-14 17:06:41
【问题描述】:

我正在尝试使用 Beautifulsoup 抓取房地产数据,但是当我将抓取结果保存到 .csv 文件时,它只包含第一页中的信息。我想抓取我在“pages_number”变量中设置的页数。

# How many pages
pages_number =int(input('How many pages? '))
# inicializa o tempo de execução
tic = time.time()

# Chromedriver

chromedriver = "./chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)


#initial link
link = 'https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page=1'
driver.get(link)

# creating looping pages

for page in range(1,pages_number+1):
    time.sleep(15)
    data = driver.execute_script("return document.getElementsByTagName('html' [0].innerHTML")
    soup_complete_source = BeautifulSoup(data.encode('utf-8'), "lxml")


我已经尝试过这个解决方案,但出现错误:

link = 'https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page={}.format(page)'

有人知道可以做什么吗?

完整代码

https://github.com/arturlunardi/webscraping_vivareal/blob/main/scrap_vivareal.ipynb

【问题讨论】:

    标签: selenium beautifulsoup screen-scraping


    【解决方案1】:

    我看到您使用的网址仅属于第 1 页。

    https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page=1
    

    您是否在代码中的任何地方更改它?如果没有,那么无论您获取什么,它都只会从第 1 页获取。

    你应该这样做:

        for page in range(1,pages_number+1):
            chromedriver = "./chromedriver"
            os.environ["webdriver.chrome.driver"] = chromedriver
            driver = webdriver.Chrome(chromedriver)
    
            #initial link
            link = f"https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page={page}"
            driver.get(link)
            time.sleep(15)
            data = driver.execute_script("return document.getElementsByTagName('html' [0].innerHTML")
            soup_complete_source = BeautifulSoup(data.encode('utf-8'), "lxml")
            driver.close()
    

    测试输出(不是汤的部分) - 用于pages_number = 3(将 url 存储在列表中,以便于查看):

    ['https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page=1', 'https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page=2', 'https://www.vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page=3']
    
    Process finished with exit code 0
    

    【讨论】:

    • 在参数列表(会话信息:chrome=97.0.4692.71)之后出现错误:JavascriptException: Message: javascript error: missing)
    • 对于范围内的页面(1,pages_number+1):time.sleep(15) link = ("vivareal.com.br/aluguel/sp/sao-paulo/?__vt=lnv:a&page={}".format(page))。这样我得到了同样的错误
    • 我的错。错过了一段代码。现在添加了。这样,每个页面都会打开一个新的浏览器,一旦事务完成,浏览器就会关闭并重复循环,直到满足输入数字为止。现在这里的问题是,data 变量 - 错误发生在这里。你能检查一下吗?汤没有正确形成另外,这个页面可能有很多 javascript async 发生。最好使用wendriverwait' 而不是time.sleep
    • 请检查答案中的代码。我修改了它,但请务必检查汤部分,因为错误发生在那里,而不是循环页面(使用此代码) - 从我粘贴的输出中可以看出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多