您的位置:新闻资讯 >文章内容
Python爬虫怎么提取免费IP
来源:Python中文社区 作者:admin 时间:2018-12-12 16:10:02

爬虫经常会遇到IP限制,如果不使用IP进行切换,是没有办法继续采集的。这主要是网站针对爬虫的措施,那么如何能够突破IP限制呢?最简单快捷的方法就是使用IP池,频繁切换IP访问,这肯定是需要大量的IP,这IP怎么来?可以使用Python爬虫抓取免费IP,下面一起去看看Python爬虫怎么提取免费IP。

一、requests代理使用

对于requests来说,代理的设置比较简单,只需要传入proxies参数即可。

不过需要注意的是,这里我是在本机安装了抓包工具Fiddler,并用它在本地端口8888创建了一个HTTP代理服务(用Chrome插件SwitchyOmega),即代理服务为:127.0.0.1:8888,我们只要设置好这个代理,就可以成功将本机ip切换成代理软件连接的服务器ip了。

Python爬虫怎么提取免费IP

import requests

proxy = '127.0.0.1:8888'proxies = {
    'http':'http://' + proxy,
    'https':'http://' + proxy}try:
    response = requests.get('http://httpbin.org/get',proxies=proxies)
    print(response.text)except requests.exceptions.ConnectionError as e:
    print('Error',e.args)

这里我是用来http://httpbin.org/get作为测试网站,我们访问该网页可以得到请求的有关信息,其中origin字段就是客户端ip,我们可以根据返回的结果判断代理是否成功。返回结果如下:

{
    "args":{},    "headers":{
        "Accept":"*/*",
        "Accept-Encoding":"gzip, deflate",
        "Connection":"close",
        "Host":"httpbin.org",
        "User-Agent":"python-requests/2.18.4"
    },
    "origin":"xx.xxx.xxx.xxx",
    "url":"http://httpbin.org/get"}

二、爬取代理网页ip和端口

开始爬取代理IP,首先我们打开Chrome浏览器查看网页,并找到ip和端口元素的信息。

Python爬虫怎么提取免费IP

可以看到,代理IP以表格存储ip地址及其相关信息,所以我们用BeautifulSoup提取时很方便便能提取出相关信息,但是我们需要注意的是,爬取的ip很有可能出现重复的现象,尤其是我们同时爬取多个代理网页又存储到同一数组中时,所以我们可以使用集合来去除重复的ip。

Python爬虫怎么提取免费IP

将要爬取页数的ip爬取好后存入数组,然后再对其中的ip逐一测试。

三、检测爬取到的ip是否可用

Python爬虫怎么提取免费IP

这里就用到了上面提到的requests设置代理的方法,我们使用http://httpbin.org/ip作为测试网站,它可以直接返回我们的ip地址,测试通过后再存入MomgoDB数据库。

四、将爬取的可用代理存入MongoDB

连接数据库然后指定数据库和集合,再将数据插入就OK了。

最后运行查看一下结果吧

毕竟是免费代理,有效的还是很少的,并且存活时间确实很短,不过,爬取的量大,还是能找到可用的,我们只是用作练习的话,还是勉强够用的。现在看看数据库里存储的吧。

五、随机抽取一个ip,测试成功后返回

因为爬取的页数不多,加上有效ip也少,再加上我没怎么爬,所以现在数据库里的ip并不多,不过也算是将这些ip给存了下来。现在就来看看怎么随机取出来吧。

由于担心放入数据库一段时间后ip会失效,所以取出前我重新进行了一次测试,如果成功再返回ip,不成功的话就直接将其移出数据库。

这样我们需要使用代理的时候,就能通过数据库随时取出来了。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部