Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python浏览包含内容分页的HTMl页面?_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

如何使用Python浏览包含内容分页的HTMl页面?

如何使用Python浏览包含内容分页的HTMl页面?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我想从以下网站抓取所有表格条目(描述序列号、文档号等的表格),并将其写入excel。到目前为止,我只能从第一页(10个条目)抓取数据。谁能帮我用python代码从这个网站的第一页到最后一页抓取数据 网站: 我的python代码: from bs4 import BeautifulSoup import requests import sys import mechanize import pprint import re import csv import urllib import urlli

我想从以下网站抓取所有表格条目(描述序列号、文档号等的表格),并将其写入excel。到目前为止,我只能从第一页(10个条目)抓取数据。谁能帮我用python代码从这个网站的第一页到最后一页抓取数据

网站:

我的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']])
非常感谢您的帮助。

正如我在中看到的,您需要与java脚本交互,该脚本由按钮
Go
Next Page
按钮调用。对于“转到”按钮,每次都需要填写文本框。您可以使用不同的方法来解决此问题:

(一)

2) 再看看


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

非常感谢Nima Soroush提供的所有参考资料。不幸的是,我从未亲身体验过java脚本或c。我正试着和spynner一起锻炼。。如果有任何疑问,我们将再次在此发表评论。非常感谢。不客气。在这里您可以找到一些有用的示例()