爬取免费ip,搭建自己的代理池

这是一篇记录自己踩坑的文章

爬取网页分三大步骤:

  1. 分析目标网站
  2. 着手编写代码
  3. 保存数据


下面开始今天的主题。上目标网站(66免费代理)

首先分析网页,我们要爬取的是ip和端口号


所有数据都存在表格里

查看网页源码,发现数据直接在源码中,因此开始接下来的操作,提取数据,使用BeautifulSoup解析。

先拿到每一页上的所有行,再提取每一个单元格中的内容,相信见代码

# _*_ coding:utf8 _*_
import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool
from pymongo import MongoClient
import re

data = []  # 用来存放爬取到的ip


# 爬取单个页面的ip
def getip(page):
    db = MongoClient('127.0.0.1', 27017).test
    # url = "https://www.89ip.cn/index_%s.html" % page  # 该代理检测不可用
    url = 'http://www.66ip.cn/%s.html' % page
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\
         (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
        'Referer': 'http://www.66ip.cn/index.html',
    }
    resp = requests.get(url=url, headers=headers, timeout=2)
    soup = BeautifulSoup(resp.text, 'lxml')
    for item in soup.find_all('tr')[2:]:
        try:
            ip = item.find_all('td')[0].get_text().strip()
            port = item.find_all('td')[1].get_text().strip()
            data.append({'ip': '{}:{}'.format(ip, port), 'verify': False})
            if len(data) == 0:
                print("结束")
            print(data)
            db.ippool.insert_many(data)

            # print(port)
        except:
            continue  # 发生异常的时候跳过此次爬取,继续下一轮


经过一番操作,成功获取数据,后面就是比较糟糕的事情了。我们爬取代理ip的主要目的是什么,当然是使用他们呀。在我校验之后,一万多个代理ip没有一个能用的。[流泪][笑哭]

后面多寻找几个网站试试,今天 就先到这里。我是爬虫小白,今后也是

举报
评论 0