# coding = utf-

 __autor__ = 'litao'

 import urllib.request
import urllib.request
import urllib.error
import socket
import gevent
from gevent import monkey
from bs4 import BeautifulSoup
import time
import random
home = "http://www.xicidaili.com/wt/"
first_proxy_list = []
end_proxy_list = []
# proxy_support = urllib.request.ProxyHandler({"http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"})
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
}
monkey.patch_all()
def test_proxy(proxy_key):
# for i in range(len(first_proxy_list)):
# proxy_support = urllib.request.ProxyHandler({"http":proxy_list[i]})
print(proxy_key)
proxy = {"http":proxy_key}
url = "https://www.baidu.com/" proxy_support = urllib.request.ProxyHandler(proxy)
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
res = urllib.request.Request(url=url, headers=headers)
try:
response = urllib.request.urlopen(res,timeout=)
if response.code == :
end_proxy_list.append(proxy_key)
except Exception as e:
print("error:",e)
# except socket.timeout as e:
# print("This proxy is socket.timeout")
# except urllib.error.URLError as e:
# print("This proxy is timeout") def get_proxy_list():
for i in range():
url =home + str(i+)
print(url)
# proxy_support = urllib.request.ProxyHandler({"http":"123.125.5.100:3128"})
# opener = urllib.request.build_opener(proxy_support)
# urllib.request.install_opener(opener)
res = urllib.request.Request(url=url, headers=headers)
response =urllib.request.urlopen(res,timeout=).read().decode()
soup = BeautifulSoup(response,'html.parser')
print(response)
content = soup.find_all("table",attrs={"id":"ip_list"})[].find_all('tr')[:]
for i in range(len(content)):
result = content[i].find_all('td')
proxy_enum = result[].text+":"+result[].text
print(proxy_enum)
first_proxy_list.append(proxy_enum)
time.sleep(random.randint(,)) def join_gevent(first_proxy_list,gevent_list):
for i in range(len(first_proxy_list)):
gevent_list.append(gevent.spawn(test_proxy,first_proxy_list[i])) def main():
gevent_list = []
get_proxy_list()
with open("proxy_first.txt",'a',encoding='utf-8') as f:
for item in first_proxy_list:
f.write(item+'\n')
join_gevent(first_proxy_list, gevent_list)
gevent.joinall(gevent_list)
print(end_proxy_list)
with open("proxy_end.txt",'a',encoding='utf-8') as f:
for item in end_proxy_list:
f.write(item+'\n') if __name__ == "__main__":
main()

代理池抓取基础版-(python协程)--抓取网站(西刺-后期会持续更新)的更多相关文章

  1. python协程爬取某网站的老赖数据

    import re import json import aiohttp import asyncio import time import pymysql from asyncio.locks im ...

  2. Python协程爬取妹子图(内有福利,你懂得~)

    项目说明: 1.项目介绍   本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...

  3. Python爬虫练习(多线程,进程,协程抓取网页)

    详情点我跳转 关注公众号"轻松学编程"了解更多. 一.多线程抓取网页 流程:a.设置种子url b.获取区域列表 c.循环区域列表 d.创建线程获取页面数据 e.启动线程 impo ...

  4. 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程

    点击了解更多Python课程>>> 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程 适用人群: 即将毕业的大学生,工资低工作重的白领,渴望崭露头角的职场新人, ...

  5. Python协程与Go协程的区别二

    写在前面 世界是复杂的,每一种思想都是为了解决某些现实问题而简化成的模型,想解决就得先面对,面对就需要选择角度,角度决定了模型的质量, 喜欢此UP主汤质看本质的哲学科普,其中简洁又不失细节的介绍了人类 ...

  6. python协程详解,gevent asyncio

    python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...

  7. Python核心技术与实战——十六|Python协程

    我们在上一章将生成器的时候最后写了,在Python2中生成器还扮演了一个重要的角色——实现Python的协程.那什么是协程呢? 协程 协程是实现并发编程的一种方式.提到并发,肯很多人都会想到多线程/多 ...

  8. 046.Python协程

    协程 1 生成器 初始化生成器函数 返回生成器对象,简称生成器 def gen(): for i in range(10): #yield 返回便能够保留状态 yield i mygen = gen( ...

  9. Python 协程总结

    Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是 ...

随机推荐

  1. [c#]Extesion method

    做一个类似Vb.net里面with的方法 public static void Use<T>(this T item, Action<T> work) { work(item) ...

  2. [Web 前端] 011 css 背景属性

    1. 概览 参数 释义 background-color 背景颜色 background-image 背景图片 background-repeat 是否重复 background-position 定 ...

  3. C#Exception 追踪异常位置

    1:在编写软件时,保护关键位置的代码正常运行,要对这位置进行异常处理try catch private void StartTCPServer() { try { ........//我们要确保知道这 ...

  4. 10-js对象、数组

    # js对象 ```1.使用原始的方式创建内置对象 var myObject = new Object(); myObject.name = “lijie”; myObject.age = 20; m ...

  5. python学习笔记(11):文件的访问与函数式编程

    一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...

  6. spark复习笔记(7):sparkSQL

    一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop  mr  sql 2.phenoix //hbase上构建sql的交互过 ...

  7. JVM 垃圾回收(GC)机制

    目录 一.背景 二. 哪些内存需要回收? 1.引用计数算法 2 .可达性分析算法 三. 四种引用状态 1.强引用 2.软引用 3.弱引用 4.虚引用 对象死亡(被回收)前的最后一次挣扎 方法区如何判断 ...

  8. 类目(category) - 类扩展(extension) 区别

    说明: 方法,属性或变量:   类别只能添加方法,不能添加属性(理论上,但可以通过runtime的关联添加). 扩展可以添加方法和实例变量或属性,实例变量默认@private类型.扩展是类别的一个特例 ...

  9. Redis 复制功能详解

    Redis 复制功能的几个重要方面: 1. 一个Master可以有多个Slave:2. Redis使用异步复制.从2.8版本开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replica ...

  10. spring boot generator

    pom.xml 插件引用依赖 <build> <plugins> <plugin> <groupId>org.springframework.boot& ...