爬取免费IP,建立自己的爬虫IP池
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取免费IP,建立自己的爬虫IP池相关的知识,希望对你有一定的参考价值。
参考技术A 建立一个自己的IP池还是有很多作用的,比如可以解决爬虫过程中的封IP的问题,当然对我来说,没爬过反爬很严重的网站,还没有遇到过封IP的时候,但是也想弄一个自己的IP池免费IP的一大缺点是不稳定,很多都用不了,所以如果需求很大的话还是使用付费的更好。对我的IP池来说免费的已经足够了
本文主要实现了爬取免费IP并保存到本地,简单验证IP有效性,并且讲解了如何使用代理IP访问网页
完整的源码在我的GitHub:
GitHub - free-proxy-crawling: self-made ip pool stored in SQLite3, crawling free proxies from websites that offer them.
从一些提供免费IP的网站中抓取IP的功能用最基本的Python爬虫实现,爬取的网站有三个:
只爬取http的高匿IP,先将IP构造成 ip:port 的字符串形式存放在 temp_set 这个集合中,然后用Python自带的pickle库保存到本地
获取到了IP之后,有很多IP是无效的,我们可以运行一个检测程序,看所用的IP是否能够成功访问百度:
IP池最简单的一种使用方式就是刷浏览量了,比如,刷文章的浏览量,,,还有,墨墨背单词每日分享的页面,浏览量可以增加单词上限。这些用处还是挺吸引人的吧~
使用代理IP访问网页主要有两种方法,如果是用 requests 库,那么方法为:
也可以使用 selenium 库,方法为:
[爬虫]一个易用的IP代理池
一个易用的IP代理池 - stand
写爬虫时常常会遇到各种反爬虫手段, 封 IP 就是比较常见的反爬策略
遇到这种情况就需要用到代理 IP, 好用的代理通常需要花钱买, 而免费的代理经常容易失效, 所以就需要自己搭建 IP 代理池, 来获取免费高效的代理 IP. 下面介绍一个自己写的 IP 代理池, 欢迎 star
安装
pip install stand
启动
stand
启动后, 爬虫会从代理网站抓取 IP, 并将数据保存在名为 stand.db 的 SQLite 数据库中, 等待爬虫抓取一定数量 IP 后, 即可使用代理
使用
>>> from stand import get_proxy
>>> proxy = get_proxy()
>>> print(proxy)
'103.133.222.151:8080'
在 Scrapy 中使用 stand 作为代理
import scrapy
from scrapy.crawler import CrawlerProcess
class TestSpider(scrapy.Spider):
name = 'test'
start_urls = ['https://api.ip.sb/ip']
def parse(self, response):
print(response.meta['proxy'])
print(response.text)
DOWNLOADER_MIDDLEWARES = {
'stand.UserAgentMiddleware': 543,
'stand.ProxyMiddleware': 600,
}
settings = dict(
LOG_ENABLED=False,
DOWNLOAD_TIMEOUT=30,
DOWNLOADER_MIDDLEWARES=DOWNLOADER_MIDDLEWARES,
)
def run():
process = CrawlerProcess(settings)
process.crawl(TestSpider)
process.start()
if __name__ == "__main__":
run()
项目说明
- 当启动 stand 时, 首先会运行 crawl 函数从代理网站爬取代理 IP, 并将爬取到的结果存储在名为 stand.db (可通过 STAND_DIR 环境变量设置保存目录) 的 SQLite 数据库中, 每个 IP 有一个初始分数 2
- 然后会运行 validate 函数验证代理 IP 的有效性, 验证通过分数设置为最高值 3, 验证失败分数减 1, 当分数为 0 时删除该 IP
- 之后会定时运行 crawl 和 validate 函数分别爬取和验证 IP, 每20分钟爬取一次 IP, 每60分钟验证一次 IP
以上是关于爬取免费IP,建立自己的爬虫IP池的主要内容,如果未能解决你的问题,请参考以下文章