如何浏览使用Python对其内容进行分页的HTMl页面? [关闭]

问题描述 投票:-2回答:1

我想从以下网站抓取所有表条目(描述S / No.,文档编号等的表)并将其写入excel。到目前为止,我只能从第一页(10个条目)抓取数据。任何人都可以帮我使用python代码来抓取本网站从头到尾的数据。

网站:https://www.gebiz.gov.sg/scripts/main.do?sourceLocation=openarea&select=tenderId

我的python代码:

from bs4 import BeautifulSoup
import requests
import sys
import mechanize
import pprint
import re
import csv
import urllib
import urllib2

browser = mechanize.Browser()
browser.set_handle_robots(False)
url = 'https://www.gebiz.gov.sg/scripts/main.do?sourceLocation=openarea&select=tenderId'
response = browser.open(url)
html_doc = response.read()

rows_list = []
table_dict = {}

soup = BeautifulSoup(html_doc)

table = soup.find("table", attrs={"width": "100%", "border": "0", "cellspacing": "2", "cellpadding": "3", "bgcolor": "#FFFFFF"})
tr_elements = table.find_all("tr", class_=re.compile((ur'(row_even|row_odd|header_subone)')))

table_rows = []

for i in range(0, len(tr_elements)):
    tr_element = tr_elements[i]
    td_elements_in_tr_element = tr_element.find_all("td")
    rows_list.append([])

    for j in range(0, len(td_elements_in_tr_element)):
        td_element = td_elements_in_tr_element[j]
        table_elements_in_td_element = td_element.find_all("table")

    if len(table_elements_in_td_element) > 0:
                   continue
                   rows_list[i].append(td_element.text)
                   pprint.pprint(len(table_elements_in_td_element))
pprint.pprint(rows_list)

rows_list.remove([])

for row in rows_list:
table_dict[row[0]] = {
            #'S/No.' : row[1],
    'Document No.': row[1] + row[2],
        'Tenders and Quotations': row[3] + row[4],
    'Publication Date': row[5],
    'Closing Date': row[6],
    'Status': row[7]
}

pprint.pprint(table_dict)

with open('gebiz.csv', 'wb') as csvfile:
    csvwriter = csv.writer(csvfile, dialect='excel')

    for key in sorted(table_dict.iterkeys()):
         csvwriter.writerow([table_dict[key]['Document No.'], table_dict[key]['Tenders and Quotations'], table_dict[key]['Publication Date'], table_dict[key]['Closing Date'], table_dict[key]['Status']])

我们将非常感谢您的每一个帮助。

python web-scraping beautifulsoup
1个回答
1
投票

正如我在this page中看到的,您需要与按钮GoNext Page按钮调用的java脚本进行交互。对于Go按钮,您需要每次填充文本框。您可以使用不同的方法来解决此问题:

1)Selenium - Web Browser Automation

2)spynner - Programmatic web browsing module with AJAX support for Python,也看看here

3)如果你熟悉c#,它还提供了一个webBrowser组件,可以帮助你点击html元素。 (例如here)。您保存每个页面的html内容,然后从脱机页面抓取它们。

© www.soinside.com 2019 - 2024. All rights reserved.