简单爬虫-爬取免费代理ip

摘要:
环境:python 3.6主要使用模块:请求,PyQuery代码相对简单,所以我不会解释太多#!

环境:python3.6

主要用到模块:requests,PyQuery

代码比较简单,不做过多解释了

#!usr/bin/python
# -*- coding: utf-8 -*-
import requests
from pyquery import PyQuery as pq


class GetProxy(object):
    def __init__(self):
        # 代理ip网站
        self.url = 'http://www.xicidaili.com/nn/'
        self.header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
        self.file = r'F:pythoncode2get_proxyproxies.txt'
        # 用于检查代理ip是否可用
        self.check_url = 'https://www.python.org/'
        self.title = 'Welcome to Python.org'


    def get_page(self):
        response = requests.get(self.url, headers=self.header)
        # print(response.status_code)
        return response.text

    def page_parse(self, response):
        stores = []
        result = pq(response)('#ip_list')
        for p in result('tr').items():
            if p('tr > td').attr('class') == 'country':
                ip = p('td:eq(1)').text()
                port = p('td:eq(2)').text()
                protocol = p('td:eq(5)').text().lower()
                # if protocol == 'socks4/5':
                #     protocol = 'socks5'
                proxy = '{}://{}:{}'.format(protocol, ip, port)
                stores.append(proxy)
        return stores

    def start(self):
        response = self.get_page()
        proxies = self.page_parse(response)
        print(len(proxies))
        file = open(self.file, 'w')
        i = 0
        for proxy in proxies:
            try:
                check = requests.get(self.check_url, headers=self.header, proxies={'http': proxy}, timeout=5)
                check_char = pq(check.text)('head > title').text()
                if check_char == self.title:
                    print('%s is useful'%proxy)
                    file.write(proxy + '
')
                    i += 1
            except Exception as e:
                continue
        file.close()
        print('Get %s proxies'%i)


if __name__ == '__main__':
    get = GetProxy()
    get.start()

免责声明:文章转载自《简单爬虫-爬取免费代理ip》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇正则表达式中^的用法【Dubbo实战】基础学习篇(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

web优化之js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载

做web前段也有一段时间了,对于web中js文件的加载有些体会想跟大家一起分享一下。 1.首先说说js文件的合并和压缩吧 为了便于集中式管理js的合并和压缩我们创建一个Js.ashx文件来专门处理合并压缩,这里我们借用Yahoo.Yui.Compressor工具来压缩我们的js文件 代码如下: public classJs : IHttpHandler...

vue+axois 封装请求+拦截器(请求锁+统一处理错误码)

 需求  封装常用请求  拦截器-请求锁  统一处理错误码 一、封装常用的请求   解决痛点:不要每一个模块的api都还要写get,post,patch请求方法。直接将这些常用的方法封装好。   解决方案:写一个类,封装好常用的请求   部分源码如下 export default class PublicAPI { constructor(ur...

NODE_ENV判断node服务器环境的设置

build->webpack.sit.conf.js 拷贝webpack.prod.conf.js,新建webpack.sit.conf.js、webpack.uait.conf.js,根据环境修改env的引入文件 config->sit.env.js build->bulid.js src -> config文件夹 -&...

微信小程序的网络设置,及网络请求:wx.request(OBJECT)

微信公众号“颜家大少” 本文所用排版工具:http://md.aclickall.com 微信小程序要实现网络请求,首先要对其进行设置,下面以"微信web开发者工具V1.01.170913"为例 一:对于服务器网站没有备案,或只需要做本地测试的用户 在“微信web开发者工具”的“设置”->“项目设置”->“项目设置”中选:不校验安全域名、TL...

巧用javascript ajax,实现跨域请求外带,增大漏洞危害

  今天聊聊javascript ajax发起请求,获取数据:    实在是漏洞挖掘中,经常会用到,学好javascript实在是太有用了    JS原生请求:      XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更...

Response.AddHeader(,)

Response.AddHeader "P3P”,"CP=CAO PSA OUR” Response.AddHeader "P3P”,"CP=CAO PSA OUR” java code : response.setHeader("P3P", "CP=CAO PSA OUR"); 一段解决IFRAME中SESSION无法保留的代码. 这个是属于HTML...