爬虫代理池
2018-03-21 20:54
176 查看
目的:
"""
1. 爬虫每次发起请求需要从代理池中提取一个可用代理, 如果提取的代理不可用, 从代理池中删除
2. 当代理池中的代理少于某个程度, 需要重新爬取一部分代理, 添加到代理池中
"""
用到的一些包(看个人需求)
import requests
# 连接数据库
import pymysql
# 第三方包的随机请求头
from fake_useragent import UserAgent
# 与 from lxml import etree 一样
from scrapy.selector import Selector
逻辑:
"""
1. 连接数据库, 获取游标
2. 准备请求头, 通过requests.get获得网页响应
3. 根据返回的数据创建Selector对象
selector = Selector(text=response.text)
4. 通过xpath查找数据(ip, port, life_time, ip_type)(因为免费的ip会有过期时间, 所以需要将过期时间较短的从中删除)
5. 根据ip查询数据, 如果查询有结果说明数据库中已经有这个信息
6. 插入数据之前, 需要判断ip是否已经存在, 如果已经存在, 就不用再次插入数据
7. 获取可用的ip, 获取可用ip之前, 判断ip个数, 这里设定一个范围如果ip个数小于多少时, 重新获取一次
8. 随机从数据库中取出一条数据, 这里是随机取出一行,需要执行完这条sql语句后加:
rs = cursor.fetchone()
# 取出ip信息
ip = rs[0]
port = rs[1]
ip_type = rs[2]
9. 测试这个ip是否有用, 这里可以使用:
try:
proxy_dict={
ip_type.lower():'{}://{}:{}'.format(ip_type.lower(), ip, port)}
# requests使用代理发送请求
response = requests.get('http://www.baidu.com', proxies=proxy_dict, timeout=0.5)
# 这里设置延迟时间0.5秒, 检测这个ip能不能用. 我的想法是不仅能用而且要快, 当然这个时间可以进行你的需要来调整,但一般不超过2秒, 除非你是慢性子~~
except Exception as e:
print(ip, '不可用')
# 删除该ip
delete_ip(ip)
# 重新获取一个ip
else:
return '{:}{}'.format(ip, port)
"""
注意: 写的可能不太详细, 但能通这个能明白大概逻辑就行, 如果想要源码可以留言 ! 博主爬取的是西刺
"""
1. 爬虫每次发起请求需要从代理池中提取一个可用代理, 如果提取的代理不可用, 从代理池中删除
2. 当代理池中的代理少于某个程度, 需要重新爬取一部分代理, 添加到代理池中
"""
用到的一些包(看个人需求)
import requests
# 连接数据库
import pymysql
# 第三方包的随机请求头
from fake_useragent import UserAgent
# 与 from lxml import etree 一样
from scrapy.selector import Selector
逻辑:
"""
1. 连接数据库, 获取游标
2. 准备请求头, 通过requests.get获得网页响应
3. 根据返回的数据创建Selector对象
selector = Selector(text=response.text)
4. 通过xpath查找数据(ip, port, life_time, ip_type)(因为免费的ip会有过期时间, 所以需要将过期时间较短的从中删除)
5. 根据ip查询数据, 如果查询有结果说明数据库中已经有这个信息
6. 插入数据之前, 需要判断ip是否已经存在, 如果已经存在, 就不用再次插入数据
7. 获取可用的ip, 获取可用ip之前, 判断ip个数, 这里设定一个范围如果ip个数小于多少时, 重新获取一次
8. 随机从数据库中取出一条数据, 这里是随机取出一行,需要执行完这条sql语句后加:
rs = cursor.fetchone()
# 取出ip信息
ip = rs[0]
port = rs[1]
ip_type = rs[2]
9. 测试这个ip是否有用, 这里可以使用:
try:
proxy_dict={
ip_type.lower():'{}://{}:{}'.format(ip_type.lower(), ip, port)}
# requests使用代理发送请求
response = requests.get('http://www.baidu.com', proxies=proxy_dict, timeout=0.5)
# 这里设置延迟时间0.5秒, 检测这个ip能不能用. 我的想法是不仅能用而且要快, 当然这个时间可以进行你的需要来调整,但一般不超过2秒, 除非你是慢性子~~
except Exception as e:
print(ip, '不可用')
# 删除该ip
delete_ip(ip)
# 重新获取一个ip
else:
return '{:}{}'.format(ip, port)
"""
注意: 写的可能不太详细, 但能通这个能明白大概逻辑就行, 如果想要源码可以留言 ! 博主爬取的是西刺
相关文章推荐
- 房产界已上市和IPO路上的难兄难弟:房天下与房多多
- 「中国漫威」如何打造超级IP ?
- webpack本地开发环境无法用IP访问的解决方法
- 雷军是谁,他为什么而奋斗?小米上市和雷军的英雄主义
- 一张图告诉你阿里巴巴离亚马逊还有多远
- 比特币买片儿指南
- 雷军系“全家桶”:坐拥互联网半壁江山
- 公众号运营2年涨粉200?一个失败的公众号运营人的独白
- UCloud 开源网络探测 SDK,定向优化海外移动端网络体验
- 使用awk统nginx日志文件ip访问站点次数
- IPV4基本设置
- NAS SAN IP SAN FC SAN DAS区别
- linux网络配置
- IP网络路由技术
- 如何利用“IP地址欺骗”
- 新手看招:避免网络 IP 地址被非法修改
- 网络管理之IP地址篇