如何在Python中使用SOCKS代理访问网站

如何在Python中使用SOCKS代理访问网站,python,python-3.x,proxy,web-crawler,Python,Python 3.x,Proxy,Web Crawler,我正在参加一个面向初学者的在线Python课程。单元的内容是教学生提取网页源代码中的所有链接。代码如下所示,代码块未知: def get_page(url): <Block_of_Code> def get_next_target(page): start_link=page.find('<a href=') if start_link==-1: return None,0 start_quote=page.find('"',s

我正在参加一个面向初学者的在线Python课程。单元的内容是教学生提取网页源代码中的所有链接。代码如下所示,代码块未知:

def get_page(url):
    <Block_of_Code>

def get_next_target(page):
    start_link=page.find('<a href=')
    if start_link==-1:
        return None,0
    start_quote=page.find('"',start_link)
    end_quote=page.find('"',start_quote+1)
    url=page[start_quote+1:end_quote]
    return url,end_quote

def print_all_links(page):
    while True:
        url,endpos=(get_next_target(page))
        if url:
            print(url)
            page=page[endpos:]
        else:
            break

print_all_links(get_page('https://youtube.com'))
但在中国,某些网站(包括youtube)被屏蔽。所以上面的代码不适用于他们

我的目标是获得任何网站的源代码,无论是否被阻止

我在谷歌上搜索了一些使用socks代理的代码,但没有一个有效。例如,我基于(执行了
pip install PySocks
)编写并尝试了以下代码

错误消息是:

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
我使用socks代理搜索代码的原因是我一直使用socks代理服务访问被阻止的网站。通过启动我的服务提供商提供的应用程序,我可以使用Firefox等网络浏览器访问这些网站。(我的socks代理端口是2012)

尽管如此,任何类型的解决方案都是受欢迎的,不管它是否是socks代理,只要它能让我获得任何页面的源代码


我正在Windows 10上使用Python 3.6.3。

您链接的文章中描述的两种方法在我的系统(win 7、Python 2.7和Python 3.6)上都可以正常工作。你从你的代码中得到了什么回应?@t.m.adam很抱歉我回复晚了。我刚刚在问题中添加了错误消息。顺便说一句,对我来说,这两种方法都有效,但只适用于在我国没有被政府封锁的网站。对于被屏蔽的网站,第二种方法应该是有效的,因为它适用于我的一些同胞。但不知怎么的,它对我不起作用。我找不到你的代码有任何错误,事实上我运行它(使用tor作为socks5代理)并获得241个链接。你试过另一个代理吗?你可以在这里获得一些免费的http/s代理@t.m.adam我在你的链接中尝试了一个免费的代理。还是失败了
ConnectionRefusedError:[WinError 10061]无法建立连接,因为目标计算机主动拒绝它
您链接的文章中描述的两种方法在我的系统(win 7、python 2.7和python 3.6)上都可以正常工作。你从你的代码中得到了什么回应?@t.m.adam很抱歉我回复晚了。我刚刚在问题中添加了错误消息。顺便说一句,对我来说,这两种方法都有效,但只适用于在我国没有被政府封锁的网站。对于被屏蔽的网站,第二种方法应该是有效的,因为它适用于我的一些同胞。但不知怎么的,它对我不起作用。我找不到你的代码有任何错误,事实上我运行它(使用tor作为socks5代理)并获得241个链接。你试过另一个代理吗?你可以在这里获得一些免费的http/s代理@t.m.adam我在你的链接中尝试了一个免费的代理。还是失败了<代码>连接拒绝错误:[WinError 10061]无法建立连接,因为目标计算机主动拒绝它
import socket
import socks
import urllib.request

socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 2012)
socket.socket = socks.socksocket
return urllib.request.urlopen(url).read().decode('utf-8')
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host