由于一些网站采取了一些反爬虫的措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了某个阈值,那么服务器会直接拒绝服务,返回一些错误信息。这种情况可以称为封IP,也就是网站把我们的IP给封掉了。解决方法当然就是使用代理了。本文主要经一些 常用的Python模块代理的使用,包括urllib,requests,selenium。
1.urllib
#urllib
#输出结果是一个JSON,它有一个字段origin,表明了客户端的IP。
from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener
proxy=''
# proxy='username:password@' #若碰到需要认证的代理,可以进行这样的设置。
proxy_handler=ProxyHandler({
'http':'http://'+proxy,
'https':'https://'+proxy,
})
opener=build_opener(proxy_handler)
try:
response=opener.open('http://httpbin.org/get')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
2.requests
#requests
import requests
proxy=''
proxy='username:password@' #有用户验证的情况
proxies={
'http':'http://'+proxy,
'https':'https://'+proxy,
}
try:
response=requests.get('http://httpbin.org/get',proxies=proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error',e.args)
3.selenium
#selenium(有界面:Chrome,无界面:Plantomjs)
#Chrome
from selenium import webdriver
proxy=''
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://'+proxy)
browser=webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')
#plantomjs
from selenium import webdriver
service_args=[
'--proxy=',
'--proxy-type=http'
]
# service_args=[
# '--proxy=127.0.0.1:9743',
# '--proxy-type=http',
# '--proxy-auth=username:password'
# ] #需要进行认证设置的时候
browser=webdriver.PhantomJS(service_args=service_args)
browser.get('http://httpbin.org/get')
print(browser.page_source)