本文目录一览:
- python 如何编写代理服务器
- 如何使用服务器代理 python使用代理服务器
- python 怎样设置代理访问http请求
- 如何在python配置动态转发代理?
- 「2022 年」崔庆才 Python3 爬虫教程 - 代理的使用方法
python 如何编写代理服务器
from bottle import run, route, request, response
from urllib.request import urlopen
@route('url:re:.*')
def get_method(url):
data = urlopen(url)
return data.read()
run(host='0.0.0.0', port=3456, debug=True)
我简单写一个,使用bottle框架,注意不要使用IE的代理,使用别的浏览器如Firefox代理到 127.0.0.1:3456
。
如何使用服务器代理 python使用代理服务器
小鸟云服务器(niaoyun)实例创建好之后,您可以使用以下任意一种方式登录服务器:
- 远程桌面连接(Microsoft Terminal Services Client, MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。
- 管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。
使用远程桌面连接(MSTSC)登录实例
- 打开开始菜单远程桌面连接,或在开始菜单搜索中输入
mstsc
。也可以使用快捷键Win+R
来启动运行窗口,输入mstsc
后回车启动远程桌面连接。 - 在远程桌面连接对话框中,输入实例的公网IP地址。单击“显示选项”。
- 输入用户名,如小鸟云默认为
niaoyun
。单击“允许我保存凭据”,然后单击“连接”。这样以后登录就不需要手动输入密码了。
python 怎样设置代理访问http请求
有几种方法。一种是设置环境变量 http_proxy
,它会自动访问这个。另外一种是你使用 urllib2
的时候,在参数里加上代理。还有一个是 urllib
上指定。
比如:
import urllib
urllib.urlopen("某网站", proxies={'http:': "某代理IP地址:代理的端口"})
使用QT时,它的浏览器设置代理要在浏览器初始化参数里指定。
如何在python配置动态转发代理?
你好,首先你需要一个 middlewares.py
,如下:
import random
from settings import UAPOOL
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware
class Uamid(UserAgentMiddleware):
def __init__(self, user_agent=''):
self.user_agent = user_agent
def process_request(self, request, spider):
thisua = random.choice(UAPOOL)
print("当前使用User-Agent是:" + thisua)
request.headers.setdefault('User-Agent', thisua)
在 settings.py
文件中添加用户 UserAgent 的信息:
# 设置用户代理池,那些动态代理就放到这里了
UAPOOL = [
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
]
「2022 年」崔庆才 Python3 爬虫教程 - 代理的使用方法
前面我们介绍了多种请求库,如 urllib
、requests
、Selenium
、Playwright
等用法,但是没有统一梳理代理的设置方法,本节我们来针对这些库来梳理下代理的设置方法。
在本节开始之前,请先根据上一节了解一下代理的基本原理,了解了基本原理之后我们可以更好地理解和学习本节的内容。
另外我们需要先获取一个可用代理,代理就是 IP 地址和端口的组合,就是 IP:端口
这样的格式。如果代理需要访问认证,那就还需要额外的用户名密码两个信息。
获取代理
使用搜索引擎搜索 “代理” 关键字,可以看到许多代理服务网站,网站上会有很多免费或付费代理,比如快代理的免费 HTTP 代理:上面就写了很多免费代理,但是这些免费代理大多数情况下并不一定稳定,所以比较靠谱的方法是购买付费代理。付费代理的各大代理商家都有套餐,数量不用多,稳定可用即可,我们可以自行选购。
另外除了购买付费 HTTP 代理,我们也可以在本机配置一些代理软件,具体的配置方法可以参考,软件运行之后会在本机创建 HTTP 或 SOCKS 代理服务,所以代理地址一般都是 127.0.0.1:
这样的格式,不同的软件用的端口可能不同。
这里我的本机安装了一部代理软件,它会在本地 7890 端口上创建 HTTP 代理服务,即代理为 127.0.0.1:7890
。另外,该软件还会在 7891 端口上创建 SOCKS 代理服务,即代理为 127.0.0.1:7891
,所以只要设置了这个代理,就可以成功将本机 IP 切换到代理软件连接的服务器的 IP 了。
在本章下面的示例里,我使用上述代理来演示其设置方法,你也可以自行替换成自己的可用代理。
设置代理后,测试的网址是 http://httpbin.org/ip
,访问该链接我们可以得到请求的相关信息,其中返回结果的 origin
字段就是客户端的 IP,我们可以根据它来判断代理是否设置成功,即是否成功伪装了 IP。
urllib 设置代理
from urllib.request import ProxyHandler, build_opener
proxy = '127.0.0.1:7890'
proxy_handler = ProxyHandler({
'http': 'http://' + proxy,
'https': 'https://' + proxy
})
opener = build_opener(proxy_handler)
response = opener.open('http://httpbin.org/ip')
print(response.read())
运行结果如下:
{
"origin": "代理IP"
}
如果遇到需要认证的代理,我们可以用如下的方法设置:
proxy = 'username:password@127.0.0.1:7890'
如果代理是 SOCKS5 类型,可以用如下方式设置代理:
pip install PySocks
from urllib.request import ProxyHandler, build_opener
proxy = '127.0.0.1:7891'
proxy_handler = ProxyHandler({
'http': 'socks5://' + proxy,
'https': 'socks5://' + proxy
})
opener = build_opener(proxy_handler)
response = opener.open('http://httpbin.org/ip')
print(response.read())
requests 设置代理
import requests
proxies = {
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890'
}
response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)
如果代理需要认证:
proxies = {
'http': 'http://username:password@127.0.0.1:7890',
'https': 'http://username:password@127.0.0.1:7890'
}
如果需要使用 SOCKS 代理:
pip install requests[socks]
proxies = {
'http': 'socks5://127.0.0.1:7891',
'https': 'socks5://127.0.0.1:7891'
}
httpx 设置代理
import httpx
proxies = {
'http://': 'http://127.0.0.1:7890',
'https://': 'http://127.0.0.1:7890'
}
response = httpx.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)
对于需要认证的代理:
proxies = {
'http://': 'http://username:password@127.0.0.1:7890',
'https://': 'http://username:password@127.0.0.1:7890'
}
对于 SOCKS 代理:
pip install httpx-socks
同步模式:
from httpx_socks import SyncProxyTransport
transport = SyncProxyTransport.from_url('socks5://127.0.0.1:7891')
response = httpx.get('http://httpbin.org/ip', transport=transport)
print(response.text)
异步模式:
from httpx_socks import AsyncProxyTransport
transport = AsyncProxyTransport.from_url('socks5://127.0.0.1:7891')
async with httpx.AsyncClient(transport=transport) as client:
response = await client.get('http://httpbin.org/ip')
print(response.text)
Selenium 设置代理
对于无认证的代理:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://127.0.0.1:7890')
browser = webdriver.Chrome(options=options)
browser.get('http://httpbin.org/ip')
对于认证代理:
需要在本地创建一个 manifest.json
配置文件和 background.js
脚本来设置认证代理。运行代码之后,本地会生成一个 proxy_auth_plugin.zip
文件来保存当前配置。
对于 SOCKS 代理:
options.add_argument('--proxy-server=socks5://127.0.0.1:7891')
aiohttp 设置代理
import aiohttp
import asyncio
async def fetch():
async with aiohttp.ClientSession() as session:
async with session.get('http://httpbin.org/ip', proxy='http://127.0.0.1:7890') as response:
print(await response.text())
asyncio.run(fetch())
对于认证代理:
session.get('http://httpbin.org/ip', proxy='http://username:password@127.0.0.1:7890')
对于 SOCKS 代理:
pip install aiohttp-socks
from aiohttp_socks import ProxyConnector, ProxyType
connector = ProxyConnector(proxy_type=ProxyType.SOCKS5, host='127.0.0.1', port=7891)
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('http://httpbin.org/ip') as response:
print(await response.text())
Pyppeteer 设置代理
from pyppeteer import launch
import asyncio
async def main():
browser = await launch(args=['--proxy-server=http://127.0.0.1:7890'])
page = await browser.newPage()
await page.goto('http://httpbin.org/ip')
content = await page.content()
print(content)
await browser.close()
asyncio.run(main())
对于 SOCKS 代理:
await launch(args=['--proxy-server=socks5://127.0.0.1:7891'])
Playwright 设置代理
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={"server": "http://127.0.0.1:7890"})
page = browser.new_page()
page.goto("http://httpbin.org/ip")
print(page.content())
browser.close()
对于 SOCKS 代理:
browser = p.chromium.launch(proxy={"server": "socks5://127.0.0.1:7891"})
对于有用户名和密码的代理:
browser = p.chromium.launch(proxy={"server": "http://127.0.0.1:7890", "username": "foo", "password": "bar"})
以上我们就总结了各个请求库的代理使用方式,各种库的设置方法大同小异,学会了这些方法之后,以后如果遇到封 IP 的问题,我们可以轻松通过加代理的方式来解决。