【问题标题】:How to access webpages using Python via a proxy [duplicate]如何通过代理使用 Python 访问网页 [重复]
【发布时间】:2015-09-22 08:50:42
【问题描述】:

我正在编写一个小程序,通过提供 URL 从网页中获取所有超链接,但我所在的网络似乎正在使用代理,并且无法获取.. 我的代码:

import sys
import urllib
import urlparse

from bs4 import BeautifulSoup
def process(url):
    page = urllib.urlopen(url) 
    text = page.read()
    page.close()
    soup = BeautifulSoup(text) 
    with open('s.txt','w') as file:
        for tag in soup.findAll('a', href=True):
            tag['href'] = urlparse.urljoin(url, tag['href'])
            print tag['href']
            file.write('\n')
            file.write(tag['href'])


def main():
    if len(sys.argv) == 1:
        print 'No url !!'
        sys.exit(1)
    for url in sys.argv[1:]:
        process(url)

【问题讨论】:

  • 根据您的问题,您的网络可能有也可能没有正在使用的代理。你能更具体一点,或者只是通过你的管理员询问?
  • 是的,它有一个代理,我在家里试过它工作正常,但是当我把它带到我的部门向我的老师展示它的工作时......这是错误IOError: [Errno socket error] [Errno -2] Name or service not known
  • 这也是我使用的代理连接“proxy4.nehu.ac.in:3128”我如何将它放入我的程序中的代码中......?请帮忙,我很坚持。
  • 好的,我会检查一下,如果我遇到一些问题,我会回复你..此时我无法测试它,因为我必须在大学本身尝试,因为我没有代理网络测试。如果你没问题?
  • 您可以轻松地自行设置代理。例如。鱿鱼很受欢迎。

标签: python beautifulsoup urllib


【解决方案1】:

您可以改用 requests 模块。

import requests

proxies = { 'http': 'http://host/' } 
# or if it requires authentication 'http://user:pass@host/' instead

r = requests.get(url, proxies=proxies)
text = r.text

【讨论】:

  • 我应该这样说吗proxies = { 'http': 'http://proxya4.nehu.ac.in }
  • 您需要端口和结束报价。所以应该是proxies = { 'http': 'http://proxya4.nehu.ac.in:3128' }
  • 我可以稍后再联系你吗?我会先尝试让你知道情况如何?..我真的很想让这个工作..我喜欢在里面哭得很厉害。
  • 嗨,我试过你的建议,当我打印 r=requests.get("http://www.dota2.com",proxies=poxies) 时,我得到了 'response 200' 这是什么意思。
  • 200 是响应的状态码。就是说反应没问题。 [1] 要从页面中获取html,需要打印r.text。 [1]:w3.org/Protocols/rfc2616/rfc2616-sec10.html
【解决方案2】:

您用于 HTTP 访问的 urllib 库不支持代理身份验证(它支持未经身份验证的代理)。来自the docs

目前还没有需要身份验证才能使用的代理 支持的;这被认为是实施限制。

我建议你切换到urllib2 并按照the answer to this post 中的演示使用它。

【讨论】:

  • 我是 python 新手,所以我很难实现,只是为了抢先一步,你能不能告诉我我应该如何把它放在我的程序中 ..?
  • 我在 python 文档中读到了 urllib2 中有一个 proxyHandler 可以处理代理,我如何把它放在这样的方式,它会通过我用来连接到互联网的代理.请帮忙
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多