簡體   English   中英

抓取 ASP.net 網站:需要使用 Python 機械化瀏覽 Gridview

[英]Scraping ASP.net website: Need to Page through a Gridview using Python Mechanize

我正在嘗試抓取 asp.net 頁面,我需要在該頁面中翻閱 gridview 控件中的項目列表。 我從未使用過 asp.net 但一直在網上搜索指針,但現在我遇到了障礙。 頁面鏈接的形式為:

javascript:__doPostBack('ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$gridViewItems','Page$2')

我目前正在嘗試使用 Python 中的 Mechanize 來完成這項工作。 我最初嘗試了以下方法,假設 VIEWSTATE 變量將由 mechanize 處理。

br.form.set_all_readonly(False)
br['__EVENTTARGET'] = 'ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$gridViewItems'
br['__EVENTARGUMENT'] = 'Page$2'
response = br.submit(name="ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$itemLocator$btnItemSearch")
html = br.response().read()

使用網絡監視器(Fiddler2),我注意到填充了另外兩個變量,因此我也添加了這些變量:

br.select_form(nr=0)
br.form.new_control('hidden','ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ScriptManager1',attrs = dict(name='ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ScriptManager1'))
br.form.new_control('hidden','hiddenInputToUpdateATBuffer_CommonToolkitScripts',attrs = dict(name='hiddenInputToUpdateATBuffer_CommonToolkitScripts'))
br.form.new_control('hidden','__ASYNCPOST',attrs = dict(name='__ASYNCPOST'))
br.form.set_all_readonly(False)
br['hiddenInputToUpdateATBuffer_CommonToolkitScripts'] = '1'
br['__ASYNCPOST'] = 'TRUE'
br['ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ScriptManager1'] = 'ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$SearchResultsUpdatePanel|ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$gridViewItems'
br['__EVENTTARGET'] = 'ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$gridViewItems'
br['__EVENTARGUMENT'] = 'Page$2'
response = br.submit(name="ctl00$ctl00$ctl00$ContentPlaceHolderEverything$ContentPlaceHolderFullWidthContent$ContentPlaceHolderMain$itemLocator$btnItemSearch")
html = br.response().read()

有了這兩個 html 我回來的仍然是第 1 頁。

我認為可能有幾個潛在的問題:

  1. 我不確定我的提交是否正確。 頁面上有多個提交按鈕,所以我要搜索的是“搜索”按鈕,這是我以前用來訪問第一頁的按鈕。 我可以看到這就是顯示第一頁的原因。 如果我使用沒有名稱的 br.submit(),那么它會使用另一個提交控件,將您帶到其他地方。

  2. 當您在瀏覽器中單擊頁碼時,gridview 控件會在不重新加載頁面的情況下更新。 由於我沒有運行 Javascript,所以也許我無法得到它,但我至少希望能夠從 POST 中取回數據並對其進行解析。

任何幫助將非常感激!

通過按照此處的答案構建 xmlhttprequest 來管理它:

使用 Python 和 Mechanize 提交表單數據並進行身份驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM