2016-06-21 2 views
1

Я написал сценарий, который сбрасывает URL-адрес. Он отлично работает в ОС Linux. Но я получаю ошибку http 503 при работе в Windows 7. У URL-адреса есть некоторые проблемы. Я использую python 2.7.11. Пожалуйста, помогите. Ниже приведен сценарий:Скрипт сценария работает в Linux, но не в 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() 

В случае, если запустить его в Windows 7, ЦМД бросает http503 ошибке, говорящее вопрос с URL. URL-адрес отлично работает в ОС Linux. Если URL-адрес действительно неверный, предложите альтернативы.

+0

Это не связано, но знаете ли вы вместо того, чтобы генерировать 10 запросов, вы можете добавить '& num = 100' в конце вашего поискового URL и сразу получить 100 результатов? – spectras

+3

Google может блокировать ваш IP из-за слишком большого количества подключений. – Barmar

+0

На самом деле, очень хорошая точка @ Бармара. Это правда, что автоматические запросы противоречат Условиям использования Google, они могут блокировать вас. Странно, что это будет постоянно происходить из его Windows, а не из его Linux-бокса. – spectras

ответ

0

Очевидно, что с Python 2.7.2 в Windows, когда вы отправляете пользовательский заголовок User-agent, urllib2 не отправляет этот заголовок. (источник: https://stackoverflow.com/a/8994498/6479294).

Таким образом, вы можете рассмотреть вопрос об использовании запросов вместо urllib2 в Windows:

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

EDIT: Кроме того, очень хороший момент, чтобы сделать то, что Google может блокировать ваш IP - они не очень нравится боты, составляющие 100 нечетных запросов последовательно.

+1

Спасибо, что request.get выполнил эту работу. –