网站抓取脚本适用于Linux但不适用于Windows 7?

时间:2016-06-21 10:30:20

标签: python web screen-scraping

我编写了一个用于抓取网址的脚本。它在Linux OS上运行良好。但是我在Windows 7上运行时遇到http 503错误。该URL存在一些问题。 我正在使用python 2.7.11。 请帮忙。 以下是剧本:

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中运行它,cmd会抛出http503错误,说明问题与url有关。 该URL在Linux OS中正常工作。如果URL实际上是错误的,请建议替代方案。

1 个答案:

答案 0 :(得分:0)

显然,在Windows上使用Python 2.7.2,只要您发送自定义User-agent标头,urllib2就不会发送该标头。 (来源:https://stackoverflow.com/a/8994498/6479294)。

因此,您可能需要考虑在Windows中使用请求而不是urllib2:

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

编辑:另外一个非常好的观点是谷歌可能会阻止你的IP - 他们并不喜欢机器人顺序发出100多个请求。