Python 2.7 从另一个源(Python)访问Internet时,不会运行Web爬虫脚本

Python 2.7 从另一个源(Python)访问Internet时,不会运行Web爬虫脚本,python-2.7,http-status-code-404,mechanize,Python 2.7,Http Status Code 404,Mechanize,我遇到了一个问题,我的网络爬虫只有在我连接到家庭互联网时才能正常运行 在Windows7上使用Python2.7和Mechanize模块 下面是有关代码的一些详细信息(下面的代码片段)-此web爬虫程序登录到一个网站,通过一系列链接导航,找到下载文件的链接,下载文件,将文件保存到预设文件夹,然后重复此过程数千次 我能够在家里的有线和无线互联网上成功运行代码。当我通过其他来源(如工作、星巴克、邻居家、移动热点)连接到互联网时,脚本运行,但在尝试访问链接下载文件时返回错误: httperror_se

我遇到了一个问题,我的网络爬虫只有在我连接到家庭互联网时才能正常运行

在Windows7上使用Python2.7和Mechanize模块

下面是有关代码的一些详细信息(下面的代码片段)-此web爬虫程序登录到一个网站,通过一系列链接导航,找到下载文件的链接,下载文件,将文件保存到预设文件夹,然后重复此过程数千次

我能够在家里的有线和无线互联网上成功运行代码。当我通过其他来源(如工作、星巴克、邻居家、移动热点)连接到互联网时,脚本运行,但在尝试访问链接下载文件时返回错误:

httperror_seek_wrapper: HTTP ERROR 404: Not Found
这是我访问此站点时IDE中打印的内容:

send: 'GET /download/8635/CLPOINT.E00.GZ HTTP/1.1\r\nHost: dl1.geocomm.com\r\nUser-Agent: Mozilla/5.0 (x11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1\r\nCookie: MSGPOPUP=1391465678; TBMSESSION=5dee7266e3dcfa0193972102c73a2543\r\nConnection: close\r\nAccept-Encoding: gzip\r\n\r\n'
reply: 'HTTP/1.1 404 Not Found\r\n'
header: Content-Type: text/html
header: Content-Length: 345
header: Connection: close
header: Date: Mon, 03 Feb 2014 22:14:44 GMT
header: Server: lighttpd/1.4.32
简单地切换回我的家庭互联网让我困惑的是,除了互联网的来源之外,我什么都没有改变——我只是从路由器断开连接,连接到另一个路由器,然后重新运行代码

我尝试使用以下三个选项更改浏览器标题:

br.addheaders = [('User-agent', 'Mozilla/5.0 (x11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11')]
br.addheaders = [('User-agent', 'Firefox')]
我正在使用Mechanize模块访问Internet并创建浏览器会话。这是登录代码片段和下载文件代码片段(我在这里得到404错误)


这段代码在我的家庭互联网上按预期运行(即下载文件时没有404错误),但这是一项卫星互联网服务,我每天的下载和每月的数据分配是有限的——这就是为什么我需要使用另一个互联网源来运行这段代码。我正在寻找一些帮助来更好地理解为什么代码运行在一个地方而不是另一个地方。如果您需要更多信息来帮助解决此问题,请告诉我。

正如您从get请求中看到的,您的mechanize浏览器对象正在尝试从主机/download/8635/CLPOINT.E00.GZdl1.geocomm.com获取资源

当您尝试重新检查时,您将得到404,因为资源根本不可用

dl1.geocomm.com被重定向到另一个目标

我建议您以适当的方式开始调试应用程序。 您可以从添加至少一些调试打印语句开始

def downloadData (br, url, outws):
    br.open(url)
    for l in br.links(url_regex = 'download/[0-9]{4}'):
        print(l.url)

之后,您将看到输出是如何不同的。确保每次都以相同的方式传递url。

Danny,我在最初排除故障时注意到了这一点。然而,Geocom有一些内置机制来生成指向要下载的特定数据集的链接。这种联系只有一次是好的。例如,在登录之后,如果你去,你会看到一个下载文件的链接。如果刷新页面,该url将更改。由于我在访问站点后立即访问文件url,因此url不应更改(在家运行代码时也不会更改)。我不确定如何检查资源是否“缓存在我的网关”。你能详细说明一下吗?
def downloadData (br, url, outws):
    br.open(url)
    for l in br.links(url_regex = 'download/[0-9]{4}'):
        print(l.url)