【问题标题】:Crawl multiple page using Selenium and for loop使用 Selenium 和 for 循环抓取多个页面
【发布时间】:2021-07-15 04:50:59
【问题描述】:

我想抓取网站前 30 页中的数据,预期输出是 Dataframe,但它只抓取第 1 页。

我的代码:

from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup
import re
options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage') 

url = "https://bonbanh.com/oto/page,"
data = []
for i in range(1,10):
    driver.get(url + str(i))
    x=driver.find_element_by_xpath("/html/body/div/div[6]/div[4]/div/div/div[2]/div[1]").text
    print(x)
    elements = driver.find_elements_by_css_selector(".cb1")
    types = [el.text for el in elements]
    elements = driver.find_elements_by_css_selector(".cb2_02")
    names = [el.text for el in elements]
    elements = driver.find_elements_by_css_selector(".cb3")
    prices = [el.text for el in elements]
    elements = driver.find_elements_by_css_selector(".cb4")
    address = [el.text for el in elements]
    df = pd.DataFrame({'TEN_XE':names,'LOAI_XE':types, 'GIA_XE': prices, 'DIA_CHI': address}) 
    data.append(df)

我不知道为什么它只抓取数据页面 1。谢谢!!

【问题讨论】:

    标签: python pandas selenium web-crawler


    【解决方案1】:

    问题出在这段代码

    types = driver.find_elements_by_css_selector(".cb1")
    types = [el.text for el in elements]
    

    由于您的elements 未定义,您需要更改它

    year = driver.find_elements_by_css_selector(".cb1")
    types = [el.text for el in year]
    

    【讨论】:

    • 啊抱歉,我编辑了我的代码。元素= driver.find_elements_by_css_selector(".cb1")。问题是如何让它在 for 循环中抓取所有页面。我不知道为什么它不附加数据
    • 它对我来说似乎工作正常。你遇到了什么错误?
    • 这不是错误。我的目的是从本网站的 30 页收集数据,但我的代码只从第一页收集 21 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多