什么是代理
代理服务器
代理服务器的作用
就是用来转发请求和响应
在爬虫中为何需要使用代理?
有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单,则该ip再次发起的请求,网站服务器就不在受理,则我们就无法再次爬取该网站的数据。
使用代理后,网站服务器接收到的请求,最终是由代理服务器发起,网站服务器通过请求获取的ip就是代理服务器的ip,并不是我们客户端本身的ip。
代理的匿名度
透明:网站的服务器知道你使用了代理,也知道你的真实ip
匿名:网站服务器知道你使用了代理,但是无法获知你真实的ip
高匿:网站服务器不知道你使用了代理,也不知道你的真实ip(推荐)
代理的类型(重要)
http:该类型的代理服务器只可以转发http协议的请求
https:可以转发https协议的请求
如何获取代理?
如何使用代理?
测试:访问如下网址,返回自己本机ip
import requests
from lxml import etree
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
url = 'http://www.cip.cc/'
page_text = requests.get(url,headers=headers).text
tree = etree.HTML(page_text)
text = tree.xpath('/html/body/div/div/div[3]/pre/text()')[0]
print(text.split('\n')[0])
- 使用代理发起请求,查看是否可以返回代理服务器的ip
import requests
from lxml import etree
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
url = 'http://www.cip.cc/'
page_text = requests.get(url,headers=headers,proxies={'http':'121.234.12.62:4246'}).text
tree = etree.HTML(page_text)
text = tree.xpath('/html/body/div/div/div[3]/pre/text()')[0]
print(text.split('\n')[0])
- 代理池
import request
from lxml import etree
import random
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
}
def get_proxy_pool():
p_url = '代理提取的url'
page_text = requests.get(p_url).text
proxy_list = page_text.split('\r\n')
return proxy_list
proxy_list = get_proxy_pool() #获取了代理池(列表)
for page in range(1,100):
url = 'https://wz.sun0769.com/political/index/politicsNewest?id=1&page=%d'%page
page_text = requests.get(url,headers=headers,proxies={'https':random.choice(proxy_list)}).text
tree = etree.HTML(page_text)
ret = tree.xpath('/html/body/div[2]/div[3]/ul[2]/li[1]/span[3]/a/text()')[0]
print(ret)