在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools这个目录,里面存放一些常用的目录,包括这个免费IP池,具体目录如下:

crawl_ip_from_xichi.py 代码如下:

import requests
from fake_useragent import UserAgent
from scrapy.selector import Selector
import time
import pymysql class GetIPFromXichi(object):
"""通过西刺得到可用的IP,存入数据库"""
def crawl_ip(self):
"""爬取西刺的免费IP"""
ip_list = []
for i in range(1, 20):
headers = UserAgent()
ua = getattr(headers, "random")
ua = {"User-Agent": ua}
url = "http://www.xicidaili.com/nn/" + str(i)
response = requests.get("http://www.xicidaili.com/nn/", headers=ua)
time.sleep(3)
selector = Selector(text=response.text)
alltr = selector.css("#ip_list tr")
for tr in alltr[1:]:
speed_str = tr.css(".bar::attr(title)").extract_first()
if speed_str:
speed = float(speed_str.split("秒")[0])
else:
speed = 0
all_text = tr.css("td ::text").extract()
ip = all_text[0]
port = all_text[1]
type = all_text[6]
if not 'HTTP' in type.upper():
type = "HTTP"
ip_list.append((ip, port, type, speed)) conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="outback")
cursor = conn.cursor()
insert_sql = """insert into ip_proxy(ip,port,type,speed) VALUES (%s,%s,%s,%s) """
for i in ip_list:
try:
cursor.execute(insert_sql, (i[0], i[1], i[2], i[3]))
conn.commit()
except Exception as e:
print(e)
conn.rollback() cursor.close()
conn.close() if __name__ == "__main__":
crawl_ip_from_xichi=GetIPFromXichi()
crawl_ip_from_xichi.crawl_ip()

这里有几个容易出错的地方,

一,把函数放在main线程中去执行,这样在以后导入这个类时就不会执行一次,

二,数据连接一定是在整个循环执行完之后才关闭。

三,为了使这个爬虫更加友好,每爬取一页面 sleep 3秒,

github  https://github.com/573320328/tools

爬取西刺网的免费IP的更多相关文章

  1. 爬取西刺网代理ip,并把其存放mysql数据库

    需求: 获取西刺网代理ip信息,包括ip地址.端口号.ip类型 西刺网:http://www.xicidaili.com/nn/ 那,如何解决这个问题? 分析页面结构和url设计得知: 数据都在本页面 ...

  2. 爬取西刺ip代理池

    好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...

  3. scrapy爬取西刺网站ip

    # scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class Xicispi ...

  4. Python四线程爬取西刺代理

    import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...

  5. 使用XPath爬取西刺代理

    因为在Scrapy的使用过程中,提取页面信息使用XPath比较方便,遂成此文. 在b站上看了介绍XPath的:https://www.bilibili.com/video/av30320885?fro ...

  6. 手把手教你使用Python爬取西刺代理数据(下篇)

    /1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...

  7. python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大

    第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a p ...

  8. python+scrapy 爬取西刺代理ip(一)

    转自:https://www.cnblogs.com/lyc642983907/p/10739577.html 第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrap ...

  9. Scrapy爬取西刺代理ip流程

    西刺代理爬虫 1. 新建项目和爬虫 scrapy startproject daili_ips ...... cd daili_ips/ #爬虫名称和domains scrapy genspider ...

随机推荐

  1. KinectFusion解析

      三维重建是指获取真实物体的三维外观形貌,并建立可复用模型的一种技术.它是当下计算机视觉的一个研究热点,主要有三方面的用途:1)相比于二维图像,可以获取更全面的几何信息:2)在VR/AR中,建立真实 ...

  2. Codeforces 842B Gleb And Pizza【几何,水】

    B. Gleb And Pizza time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  3. HDU6235-Permutation-水题-2017中国大学生程序设计竞赛-哈尔滨站-重现赛

    Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  4. hdu_1029_hash/map

    http://acm.hdu.edu.cn/showproblem.php?pid=1029 太水了,一次过,直接上代码吧,只想说最愚蠢的hash都要比map快! #include<cstdio ...

  5. FineReport调用存储过程

    "总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现. 首先分析这个问题的条件和要求: 条件:只有一个 ...

  6. ES6中promise的使用方法

    先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...

  7. 有用的linux命令笔记

    date cal [month] [year] bc 计算器 mkdir -p /home/bird/ 连续建立文件夹 mkdir -m 711 test2 创建文件夹是的权限 mv -i 询问是非覆 ...

  8. springboot:快速构建一个springboot项目

    前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...

  9. Hibernate查询对象的方法浅析

    Hibernate 查询对象是根据对象的id查询的,只要你有id (id唯一),则无论你是否其他字段与传过来的对象一致,都会查到该id在数据库对应的对象.若是在关联查询中,所关联表的id为空,即所查表 ...

  10. 重启nginx后丢失nginx.pid的解决方法

    一,nginx的停止操作 停止操作是通过向nginx进程发送信号来实现的. 步骤1:查询nginx主进程号 复制代码 代码如下: ps -ef | grep nginx 在进程列表里 面找master ...