少女祈祷中...

python爬虫之代理


本篇概述:代理原理作用,requests设置代理方法以及爬取免费代理的脚本实例

一、代理原理

根据自己理解解读:

  1. 客户端设置了代理信息后,客户端向对应的代理站点发出请求(向xxx网站发起请求)
  2. 代理站点收到请求之后,就会执行对应的响应动作(执行动作)
  3. 代理站点获得xxx网站的响应(得到站点响应)
  4. 代理站点根据客户端要求返回对应信息(客户端要求返回Source code,则返回Source code)

二、代理作用

  1. 突破自身ip访问限制,比如访问国外站点
  2. 爬取对ip访问频率有一定限制的站点
  3. 提高访问速度
  4. 隐藏真实ip

三、代理网站

免费代理ip列表

含国外ip 方法SEO顾问89代理小幻http代理云代理
不含 西刺快代理

付费代理尚未了解,此处留空

四、requests设置代理方法

requests中有预设好的参数接收代理信息 proxies,这个参数接收的是一个字典对象

因为不知道访问的网站使用的是http协议还是https协议,所以proxies最好2种都有设置

1
2
3
4
5
proxies = {
'http':92.255.255.78:54628,
'https':92.255.255.78:54628
}
resp = requests.get(url=url1,headers=headers,proxies=proxies)

五、脚本示例

github地址:https://github.com/Coder-Sakura/exp/tree/master/seo_ip

本来我是打算用89代理的api接口,但是测试之后发现可靠性有点低,并且外网ip比较少,所以转用SEO

(本次抓取代理ip主要是用在我自己做 pixiv 的小项目上,爬取关注画师的所有作品和自己的收藏作品,后续会整理出来,初学爬虫,有错还请指正)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import requests
import random
import time
from lxml import etree
from bs4 import BeautifulSoup
from requests.packages.urllib3.exceptions import InsecureRequestWarning # 用于强制取消警告
from requests.adapters import HTTPAdapter # 用于强制取消警告

requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # 强制取消警告

class seo_ip():

def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
self.agent_ip_list = []

def Agent(self,ip_agent_url):
html = requests.get(url=ip_agent_url,headers=self.headers,verify=False,timeout=5)
html_soup = BeautifulSoup(html.text, 'lxml')
# 去除第一个和前25个,26-50为国外ip
ip_list = html_soup.find('tbody').find_all('tr')[26:]
items = []
print('搜索完成,代理信息如下:')
for item in ip_list:
ip_port = list(item)[0].get_text() + ':' +list(item)[1].get_text()
# list(ip_port)[0]为ip,[1]为端口,[2]响应时间,[3]位置,[4]最后验证时间
print('ip: %s ,响应时间: %ss ,ip位置: %s' % (ip_port,list(item)[2].get_text(),list(item)[3].get_text()))
items.append(ip_port) #存储爬取到的ip(需要添加)
return items

def judge(self,items): # 检验ip活性 # https://ip.seofangfa.com/
print('正在进行代理池ip活性检测......')
for item in items:
try:
proxy = {
'http':item,
'https':item
}
# 遍历时,利用百度,设定timeout,未响应则断开连接
judge_url = 'https://www.baidu.com/'
response = requests.get(url=judge_url,headers=self.headers,proxies=proxy,verify=False,timeout=5)
self.agent_ip_list.append(item)
print(item,'可用...')
except:
print(item,'不可用...')
print('代理池ip活性检测完毕...\n代理池总量:',len(self.agent_ip_list),'\n代理池:',self.agent_ip_list)

def work(self):
ip_agent_url = 'https://ip.seofangfa.com/'
items = self.Agent(ip_agent_url)
self.judge(items)

seo_ip = seo_ip()
seo_ip.work()

没有导入这2个库的话,会因为ssl证书而出现警告,如图:

  1. from requests.packages.urllib3.exceptions import InsecureRequestWarning
  2. from requests.adapters import HTTPAdapter

六、附图

最后附上运行图

-------------本文结束感谢您的阅读-------------

本文标题:python爬虫之代理

文章作者:Coder-Sakura

发布时间:2019年02月28日 - 20:56:36

最后更新:2019年10月27日 - 15:19:47

原始链接:https://coder-sakura.github.io/blog/2019/02/28/proxy/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。