1

Ich versuche, eine Website zu kratzen, https://www.searchiqs.com/nybro/ (Sie müssen auf "Anmelden als Gast" klicken, um zum Suchformular zu gelangen. Wenn ich nach einem Begriff Party 1 wie sagen "Andrew "Die Ergebnisse haben Paginierung und auch der Anfragetyp ist POST, also ändert sich die URL nicht und auch die Sessions sind sehr schnell. So schnell, dass wenn ich zehn Minuten warte und die Such-URL-Seite aktualisiere, gibt es einen Timeout-Fehler.Wie aspx Seiten mit Python kratzen

Ich habe vor kurzem mit dem Scraping begonnen, also habe ich meistens GET-Posts gemacht, wo ich die URL entziffern kann, also habe ich bis jetzt erkannt, dass ich das DOM anschauen muss Von den Netzwerk-Registerkarten habe ich auch Folgendes als die Formulardaten herausgefunden, die von der Suchseite an die Ergebnisse p übergeben werden Alter

__EVENTTARGET: 
__EVENTARGUMENT: 
__LASTFOCUS: 
__VIEWSTATE:/wEPaA8FDzhkM2IyZjUwNzg...(i have truncated this for length) 
__VIEWSTATEGENERATOR:F92D01D0 
__EVENTVALIDATION:/wEdAJ8BsTLFDUkTVU3pxZz92BxwMddqUSAXqb... (i have truncated this for length) 
BrowserWidth:1243 
BrowserHeight:705 
ctl00$ContentPlaceHolder1$scrollPos:0 
ctl00$ContentPlaceHolder1$txtName:david 
ctl00$ContentPlaceHolder1$chkIgnorePartyType:on 
ctl00$ContentPlaceHolder1$txtFromDate: 
ctl00$ContentPlaceHolder1$txtThruDate: 
ctl00$ContentPlaceHolder1$cboDocGroup:(ALL) 
ctl00$ContentPlaceHolder1$cboDocType:(ALL) 
ctl00$ContentPlaceHolder1$cboTown:(ALL) 
ctl00$ContentPlaceHolder1$txtPinNum: 
ctl00$ContentPlaceHolder1$txtBook: 
ctl00$ContentPlaceHolder1$txtPage: 
ctl00$ContentPlaceHolder1$txtUDFNum: 
ctl00$ContentPlaceHolder1$txtCaseNum: 
ctl00$ContentPlaceHolder1$cmdSearch:Search 

Alle in Kappen sind versteckt. Ich habe es auch geschafft, die Ergebnisstruktur herauszufinden.

Mein Skript ist bisher wirklich erbärmlich, da ich völlig leer bin, was ich als nächstes tun soll. Ich bin immer noch dabei, die Formularübergabe zu machen, die Seitennummerierung zu analysieren und das Ergebnis abzuschaben, aber ich habe absolut keine Ahnung, wie ich vorgehen soll.

import re 
import urlparse 
import mechanize 

from bs4 import BeautifulSoup 

class DocumentFinderScraper(object): 
    def __init__(self): 
     self.url = "https://www.searchiqs.com/nybro/SearchResultsMP.aspx" 
     self.br = mechanize.Browser() 
     self.br.addheaders = [('User-agent', 
           'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7')] 

##TO DO 

    ##submit form 

    #get return URL 

    #scrape results 

    #analyze pagination 


if __name__ == '__main__': 
    scraper = DocumentFinderScraper() 
    scraper.scrape() 

Jede Hilfe wäre geschätzt teuer

+0

Es ist leichter POST zu senden oder GET statt wirklich ein Formular abgeschickt:

Dieser Code sollte Sie sich Selen in Verwendung. Die Seitennummerierung kann durchgeführt werden, indem die nächste Schaltfläche gefunden und angeklickt wird, bis sie nicht gefunden wird. –

+0

http://stackoverflow.com/questions/37393171/how-to-scrap-images-from-a-aspx-page/37401048#37401048 –

+0

Sie können auch versuchen, dies zu Ihrem Python-Skript hinzuzufügen: 'logger = logging .getLogger ("mechanize") logger.addHandler (Protokollierung.StreamHandler (sys.stdout)) logger.setLevel (logging.INFO) '. Es ist im Debugging-Abschnitt hier zu finden: http://www.search.sourceforge.net/mechanize/ ... (Es ist übrigens drei Zeilen, - nicht in der Lage, es richtig in einem Kommentar zu formatieren). – Zeth

Antwort

2

ich haben Javascript deaktiviert und besuchte https://www.searchiqs.com/nybro/ und die Form sieht wie folgt aus:

enter image description here

Wie Sie die Anmelden sehen und Als Gast anmelden Schaltflächen sind deaktiviert. Dadurch wird es für Mechanize unmöglich, zu arbeiten, da es Javascript nicht verarbeiten kann und Sie das Formular nicht senden können.

Für diese Art von Problemen können Sie Selenium verwenden, das einen vollständigen Browser mit dem Nachteil simuliert, langsamer als Mechanize zu sein.

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

usr = "" 
pwd = "" 

driver = webdriver.Firefox() 
driver.get("https://www.searchiqs.com/nybro/") 
assert "IQS" in driver.title 
elem = driver.find_element_by_id("txtUserID") 
elem.send_keys(usr) 
elem = driver.find_element_by_id("txtPassword") 
elem.send_keys(pwd) 
elem.send_keys(Keys.RETURN)