2016-06-21 3 views
1

Ich habe ein Skript geschrieben, das eine URL scrappt. Es funktioniert gut unter Linux OS. Aber ich bekomme http 503 Fehler beim Ausführen unter Windows 7. Die URL hat ein Problem. Ich benutze Python 2.7.11. Bitte helfen. Im Folgenden ist das Skript:Website Scraping-Skript funktioniert in Linux, aber nicht in Windows 7?

import sys # Used to add the BeautifulSoup folder the import path 
import urllib2 # Used to read the html document 

if __name__ == "__main__": 
    ### Import Beautiful Soup 
    ### Here, I have the BeautifulSoup folder in the level of this Python script 
    ### So I need to tell Python where to look. 
    sys.path.append("./BeautifulSoup") 
    from bs4 import BeautifulSoup 

    ### Create opener with Google-friendly user agent 
    opener = urllib2.build_opener() 
    opener.addheaders = [('User-agent', 'Mozilla/5.0')] 

    ### Open page & generate soup 
    ### the "start" variable will be used to iterate through 10 pages. 
    for start in range(0,1000): 
     url = "http://www.google.com/search?q=site:theknot.com/us/&start=" + str(start*10) 
     page = opener.open(url) 
     soup = BeautifulSoup(page) 

     ### Parse and find 
     ### Looks like google contains URLs in <cite> tags. 
     ### So for each cite tag on each page (10), print its contents (url) 
    file = open("parseddata.txt", "wb") 
    for cite in soup.findAll('cite'): 
       print cite.text 
       file.write(cite.text+"\n") 
       # file.flush() 
       # file.close() 

Falls Sie es in Windows laufen 7, wirft die cmd http503 Fehler, der besagt, das Problem mit URL ist. Die URL funktioniert unter Linux OS einwandfrei. Falls die URL tatsächlich falsch ist, schlagen Sie bitte die Alternativen vor.

+0

Das ist nicht verwandt, aber wussten Sie, anstatt 10 Anfragen zu generieren, können Sie '& num = 100' am Ende Ihrer Such-URL hinzufügen und erhalten 100 Ergebnisse auf einmal? – spectras

+3

Google blockiert möglicherweise Ihre IP aufgrund zu vieler Verbindungen. – Barmar

+0

Eigentlich sehr guter Punkt @Barmar. Es ist richtig, dass automatisierte Anfragen gegen die Nutzungsbedingungen von Google verstoßen. Es ist merkwürdig, dass es konsequent von seinem Windows und nicht von seiner Linux-Box kommt. – spectras

Antwort

0

Offenbar mit Python 2.7.2 unter Windows, sendet jedes Mal, wenn Sie einen benutzerdefinierten User-Agent-Header senden, Urllib2 diesen Header nicht. (Quelle: https://stackoverflow.com/a/8994498/6479294).

So möchten Sie vielleicht mit Anfragen statt urllib2 in Windows berücksichtigen:

import requests 
# ... 
page = requests.get(url) 
soup = BeautifulSoup(page.text) 
# etc... 

EDIT: Auch ein sehr guter Punkt gemacht werden, dass Google Ihre IP blockieren können - sie weiß nicht wirklich wie Bots machen 100 ungerade Anfragen nacheinander.

+1

Vielen Dank requires.get hat den Job gemacht. –

Verwandte Themen