【问题标题】:how to go to next webpage web scraping如何去下一个网页网页抓取
【发布时间】:2021-06-03 00:41:15
【问题描述】:

我正在学习抓取网站 如何转到下一页直到最后一页并附加数据并保存在csv中

URL = "https://agmarknet.gov.in/SearchCmmMkt.aspx?Tx_Commodity=78&Tx_State=KK&Tx_District=0&Tx_Market=0&DateFrom=01-Jan-2015&DateTo=01-Feb-2021&Fr_Date=01-Jan-2015&To_Date=01-Feb-2021&Tx_Trend=0&Tx_CommodityHead=Tomato&Tx_StateHead=Karnataka&Tx_DistrictHead=--Select--&Tx_MarketHead=--Select--"

tables = pd.read_html(URL,attrs = {'class' : 'tableagmark_new'})
while True:
    driver = webdriver.Chrome('C:\\Program Files\\Google\\Chrome\\chromedriver_win32\\chromedriver.exe')
    next_page_btn = driver.find_elements_by_xpath("//li[@class = 'pagination-next']/a")
    if len(next_page_btn) < 1:
        break
    else:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next'))).click()

我想要 csv 格式的上表链接中的数据。我能够从第一个表中获取数据,但无法自动将其转到下一页并从下一个表中附加数据。

【问题讨论】:

  • 为什么需要这个?网站上有一个Export to Excel 按钮,可以将所有数据导出到 50mb 的 excel 文件中
  • 好的,我已经发布了一个答案,可以让您在一行代码中将 html 加载到 pandas 中。

标签: python pandas selenium selenium-webdriver web-scraping


【解决方案1】:

使用xpath点击下一页。

next_page_btn = driver.find_elements_by_xpath("//input[contains(@src,'Next')]")
if len(next_page_btn) < 1:
     break
 else:
     WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@src,'Next')]"))).click()

【讨论】:

  • 现在我可以转到下一页,但我还想附加表格中的数据并以 csv 格式保存。
  • @GHOSTRIDER :您最初的问题得到解决,您可以转到下一页。如果您针对您的新要求发布单独的问题,我将不胜感激。谢谢。
  • 感谢您的解决方案。我会尝试做下一部分。
  • @GHOSTRIDER :如果您需要任何帮助,请发布另一个问题,其中包含其他贡献者将尽力帮助您的详细信息。美好的一天。
【解决方案2】:

由于您也愿意处理导出的xls 文件: 正如您所提到的,xls 文件实际上是一个 html 文件。这意味着你可以使用read_html将其读入pandas

df = pd.read_html('Agmarknet_Price_Report.xls')

read_html 生成 html 文件中所有表的数据框列表。由于您的数据中只有一个表,您可以使用df[0] 访问数据框。 df[0].head() 会输出:

Sl no. District Name Market Name Commodity Variety Grade Min Price (Rs./Quintal) Max Price (Rs./Quintal) Modal Price (Rs./Quintal) Price Date
0 1 Hassan Arasikere Tomato Tomato FAQ 1000 1000 1000 09 Dec 2020
1 2 Hassan Arasikere Tomato Tomato FAQ 1000 1000 1000 20 Nov 2020
2 3 Hassan Arasikere Tomato Tomato FAQ 750 750 750 07 Apr 2020
3 4 Hassan Arasikere Tomato Tomato FAQ 1500 1500 1500 12 Mar 2020
4 5 Hassan Arasikere Tomato Tomato FAQ 1500 1500 1500 06 Mar 2020

然后您可以将数据框保存到 csv:df[0].to_csv('filename.csv')。这将为您节省大量时间。

【讨论】:

  • 谢谢,此解决方案可将数据转换为 csv。
猜你喜欢
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多