【问题标题】:Scraping Table with mulitple pages but from single url具有多个页面但来自单个 url 的抓取表
【发布时间】:2021-10-02 03:03:40
【问题描述】:

我正在尝试从网站 KKP 抓取数据。这些表存在一些页面,但所有页面都使用相同的 url。我对网络抓取数据非常陌生。我目前正在使用 selenium 来抓取表格,但它只包含一个第一页,但我想抓取所有页面。有些日子我总是尝试通过谷歌搜索并在 youtube 上查看教程,但我仍然卡住了。链接和我当前的代码如下。如果您使用 BeautifulSoup 来抓取数据,我没有问题。我希望有一个人可以帮助我。谢谢

网站:http://www.ppk-kp3k.kkp.go.id/direktori-pulau/index.php/public_c/propinsi/11

from selenium import webdriver

from kora.selenium import wd
wd.get("http://www.ppk-kp3k.kkp.go.id/direktori-pulau/index.php/public_c/propinsi/11")

wd.maximize_window()

with open('pulau_scrapping_aceh_lengkap4.csv','w') as file:
  file.write('Pulau; Provinsi; Kabupaten \n')

pulau = wd.find_elements_by_xpath('/html/body/div[3]/div/div/table/tbody/tr/td[1]')
provinsi = wd.find_elements_by_xpath('//*[@id="DataTables_Table_0"]/tbody/tr/td[2]')
kabupaten = wd.find_elements_by_xpath('//*[@id="DataTables_Table_0"]/tbody/tr/td[3]')

row_data = []

for k in range(6):
  with open('pulau_scrapping_aceh_lengkap4.csv','a') as file:
    for i in range(len(pulau)):
      file.write(pulau[i].text + ';' + provinsi[i].text + ';' + kabupaten[i].text + '\n')
    
    next = wd.find_element_by_xpath('//*[@id="DataTables_Table_0_last"]')
    next.click()
  file.close()
wd.close()

【问题讨论】:

    标签: python selenium url web-scraping beautifulsoup


    【解决方案1】:

    整个表格都在HTML 源中,所以你可以用这个来获取它(并且不需要selenium):

    import pandas as pd
    import requests
    
    link = 'http://www.ppk-kp3k.kkp.go.id/direktori-pulau/index.php/public_c/propinsi/11'
    pd = pd.read_html(requests.get(link).text, flavor="bs4")[-1]
    print(pd)
    

    输出:

                      Pulau Propinsi             Kabupaten  Kecamatan Kependudukan
    0          SIMEULUE CUT     ACEH    KABUPATEN SIMEULUE        NaN    Tidak Ada
    1          SALAUT BESAR     ACEH    KABUPATEN SIMEULUE        NaN    Tidak Ada
    2                  RAYA     ACEH   KABUPATEN ACEH JAYA        NaN    Tidak Ada
    3                  RUSA     ACEH  KABUPATEN ACEH BESAR        NaN    Tidak Ada
    4              BENGGALA     ACEH           KOTA SABANG        NaN    Tidak Ada
    ..                  ...      ...                   ...        ...          ...
    256  Kualakepeng Mbelen     ACEH     KOTA SUBULUSSALAM        NaN    Tidak Ada
    257         Tanahtumbuh     ACEH     KOTA SUBULUSSALAM        NaN    Tidak Ada
    258       Tualang Kedep     ACEH     KOTA SUBULUSSALAM        NaN    Tidak Ada
    259      Tualang Mbelen     ACEH     KOTA SUBULUSSALAM        NaN    Tidak Ada
    260                 NaN      NaN                   NaN        NaN          NaN
    
    [261 rows x 5 columns]
    

    【讨论】:

      【解决方案2】:

      为了抓取所有页面,使用 selenium 您需要切换到这些页面(分页),提取表数据并将其存储在文件/列表中。 下面的代码将切换到给定 URL 的所有页面。

          pagenumber = 2
          driver.get("http://www.ppk-kp3k.kkp.go.id/direktoripulau/index.php/public_c/propinsi/11")
          while True:
              driver.execute_script("window.scrollBy(0,500)")
              try:
                  driver.find_element_by_link_text(str(pagenumber)).click()
                  time.sleep(5)
                  #Code to retrieve the data from tables.
                  pagenumber+=1
      
              except Exception as e:
                  print(e)
                  break
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        相关资源
        最近更新 更多