专业正规安全的配资公司炒股平台门户网
关键词不能为空

期货配资

导航

「新加坡期货铁矿代码」谁能提供下新加坡铁矿

未知
admin

股票配资代理招商加盟:不使用Python爬虫框架,多线程+代理池爬取天天基金网、股票数据

提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段。为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作。
本次使用天天基金网进行爬虫,该网站具有反爬机制,同时数量足够大,多线程效果较为明显。
技术路线

  • IP代理池
  • 多线程
  • 爬虫与反爬

编写思路

  1. 首先,开始分析天天基金网的一些数据。经过抓包分析,可知:

./fundcode_search.js包含所有基金的数据,同时,该地址具有反爬机制,多次访问将会失败的情况。

  1. 同时,经过分析可知某只基金的相关信息地址为:http://fundgz.1234567.com.cn/js/ + 基金代码 + .js
  2. 分析完天天基金网的数据后,搭建IP代理池,用于反爬作用。由于该作者提供了一个例子,所以本代码里面直接使用的是作者提供的接口。如果你需要更快速的获取到普匿IP,则可以自行搭建一个本地IP代理池。
    # 返回一个可用代理,格式为ip:端口n    # 该接口直接调用github代理池项目给的例子,故不保证该接口实时可用n    # 建议自己搭建一个本地代理池,这样获取代理的速度更快n    # 代理池搭建github地址https://github.com/1again/ProxyPooln    # 搭建完毕后,把下方的proxy.1again.cc改成你的your_server_ip,本地搭建的话可以写成127.0.0.1或者localhostn    def get_proxy():n        data_json = requests.get("http://proxy.1again.cc:35050/api/v1/proxy/?type=2").textn        data = json.loads(data_json)n        return data['data']['proxy']nn    搭建完IP代理池后,我们开始着手多线程爬取数据的工作。一旦使用多线程,则需要考虑到数据的读写顺序问题。这里使用python中的队列queue进行存储基金代码,不同线程分别从这个queue中获取基金代码,并访问指定基金的数据。由于queue的读取和写入是阻塞的,所以可以确保该过程不会出现读取重复和读取丢失基金代码的情况。nn    # 将所有基金代码放入先进先出FIFO队列中n    # 队列的写入和读取都是阻塞的,故在多线程情况下不会乱n    # 在不使用框架的前提下,引入多线程,提高爬取效率n    # 创建一个队列n    fund_code_queue = queue.Queue(len(fund_code_list))n    # 写入基金代码数据到队列n    for i in range(len(fund_code_list)):n        #fund_code_list[i]也是list类型,其中该list中的第0个元素存放基金代码n        fund_code_queue.put(fund_code_list[i][0])nn    现在,开始编写如何获取指定基金的代码。首先,该函数必须先判断queue是否为空,当不为空的时候才可进行获取基金数据。同时,当发现访问失败时,则必须将我们刚刚取出的基金代码重新放回到队列中去,这样才不会导致基金代码丢失。nn    # 获取基金数据n    def get_fund_data():nn        # 当队列不为空时n        while (not fund_code_queue.empty()):nn            # 从队列读取一个基金代码n            # 读取是阻塞操作n            fund_code = fund_code_queue.get()nn            # 获取一个代理,格式为ip:端口n            proxy = get_proxy()nn            # 获取一个随机user_agent和Referern            header = {'User-Agent': random.choice(user_agent_list),n                      'Referer': random.choice(referer_list)n            }nn            try:n                req = requests.get("http://fundgz.1234567.com.cn/js/" + str(fund_code) + ".js", proxies={"http": proxy}, timeout=3, headers=header)n            except Exception:n                # 访问失败了,所以要把我们刚才取出的数据再放回去队列中n                fund_code_queue.put(fund_code)n                print("访问失败,尝试使用其他代理访问")nn    当访问成功时,则说明能够成功获得基金的相关数据。当我们在将这些数据存入到一个.csv文件中,会发现数据出现错误。这是由于多线程导致,由于多个线程同时对该文件进行写入,导致出错。所以需要引入一个线程锁,确保每次只有一个线程写入。nn    # 申请获取锁,此过程为阻塞等待状态,直到获取锁完毕n    mutex_lock.acquire()nn    # 追加数据写入csv文件,若文件不存在则自动创建n    with open('./fund_data.csv', 'a+', encoding='utf-8') as csv_file:n        csv_writer = csv.writer(csv_file)n        data_list = [x for x in data_dict.values()]n        csv_writer.writerow(data_list)nn    # 释放锁n    mutex_lock.release()nn    至此,大部分工作已经完成了。为了更好地实现伪装效果,我们对header进行随机选择。nn    # user_agent列表n    user_agent_list = [n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',n        'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',n        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'n    ]nn    # referer列表n    referer_list = [n        'http://fund.eastmoney.com/110022.html',n        'http://fund.eastmoney.com/110023.html',n        'http://fund.eastmoney.com/110024.html',n        'http://fund.eastmoney.com/110025.html'n    ]nn    # 获取一个随机user_agent和Referern    header = {'User-Agent': random.choice(user_agent_list),n              'Referer': random.choice(referer_list)n    }nn    最后,在main中,开启线程即可。nn    # 创建一个线程锁,防止多线程写入文件时发生错乱n    mutex_lock = threading.Lock()n    # 线程数为50,在一定范围内,线程数越多,速度越快n    for i in range(50):n        t = threading.Thread(target=get_fund_data,name='LoopThread'+str(i))n        t.start()nn    通过对多线程和IP代理池的实践操作,能够更加深入了解多线程和爬虫的工作原理。当你在使用一些爬虫框架的时候,就能够做到快速定位错误并解决错误。nn数据格式nn000056,建信消费升级混合,2019-03-26,1.7740,1.7914,0.98,2019-03-27 15:00nn000031,华夏复兴混合,2019-03-26,1.5650,1.5709,0.38,2019-03-27 15:00nn000048,华夏双债增强债券C,2019-03-26,1.2230,1.2236,0.05,2019-03-27 15:00nn000008,嘉实中证500ETF联接A,2019-03-26,1.4417,1.4552,0.93,2019-03-27 15:00nn000024,大摩双利增强债券A,2019-03-26,1.1670,1.1674,0.04,2019-03-27 15:00nn000054,鹏华双债增利债券,2019-03-26,1.1697,1.1693,-0.03,2019-03-27 15:00nn000016,华夏纯债债券C,2019-03-26,1.1790,1.1793,0.03,2019-03-27 15:00n功能截图nn配置说明nnn# 确保安装以下库,如果没有,请在python3环境下执行pip install 模块名n    import requestsn    import randomn    import ren    import queuen    import threadingn    import csvn    import jsonnn
  1. 搭建完IP代理池后,我们开始着手多线程爬取数据的工作。一旦使用多线程,则需要考虑到数据的读写顺序问题。这里使用python中的队列queue进行存储基金代码,不同线程分别从这个queue中获取基金代码,并访问指定基金的数据。由于queue的读取和写入是阻塞的,所以可以确保该过程不会出现读取重复和读取丢失基金代码的情况。
    # 将所有基金代码放入先进先出FIFO队列中n    # 队列的写入和读取都是阻塞的,故在多线程情况下不会乱n    # 在不使用框架的前提下,引入多线程,提高爬取效率n    # 创建一个队列n    fund_code_queue = queue.Queue(len(fund_code_list))n    # 写入基金代码数据到队列n    for i in range(len(fund_code_list)):n        #fund_code_list[i]也是list类型,其中该list中的第0个元素存放基金代码n        fund_code_queue.put(fund_code_list[i][0])
  1. 现在,开始编写如何获取指定基金的代码。首先,该函数必须先判断queue是否为空,当不为空的时候才可进行获取基金数据。同时,当发现访问失败时,则必须将我们刚刚取出的基金代码重新放回到队列中去,这样才不会导致基金代码丢失。
  # 获取基金数据n    def get_fund_data():nn        # 当队列不为空时n        while (not fund_code_queue.empty()):nn            # 从队列读取一个基金代码n            # 读取是阻塞操作n            fund_code = fund_code_queue.get()nn            # 获取一个代理,格式为ip:端口n            proxy = get_proxy()nn            # 获取一个随机user_agent和Referern            header = {'User-Agent': random.choice(user_agent_list),n                      'Referer': random.choice(referer_list)n            }nn            try:n                req = requests.get("http://fundgz.1234567.com.cn/js/" + str(fund_code) + ".js", proxies={"http": proxy}, timeout=3, headers=header)n            except Exception:n                # 访问失败了,所以要把我们刚才取出的数据再放回去队列中n                fund_code_queue.put(fund_code)n                print("访问失败,尝试使用其他代理访问")
  1. 当访问成功时,则说明能够成功获得基金的相关数据。当我们在将这些数据存入到一个.csv文件中,会发现数据出现错误。这是由于多线程导致,由于多个线程同时对该文件进行写入,导致出错。所以需要引入一个线程锁,确保每次只有一个线程写入。
   # 申请获取锁,此过程为阻塞等待状态,直到获取锁完毕n    mutex_lock.acquire()nn    # 追加数据写入csv文件,若文件不存在则自动创建n    with open('./fund_data.csv', 'a+', encoding='utf-8') as csv_file:n        csv_writer = csv.writer(csv_file)n        data_list = [x for x in data_dict.values()]n        csv_writer.writerow(data_list)nn    # 释放锁n    mutex_lock.release()n
  1. 至此,大部分工作已经完成了。为了更好地实现伪装效果,我们对header进行随机选择。
    # user_agent列表n    user_agent_list = [n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',n        'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',n        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',n        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'n    ]nn    # referer列表n    referer_list = [n        'http://fund.eastmoney.com/110022.html',n        'http://fund.eastmoney.com/110023.html',n        'http://fund.eastmoney.com/110024.html',n        'http://fund.eastmoney.com/110025.html'n    ]nn    # 获取一个随机user_agent和Referern    header = {'User-Agent': random.choice(user_agent_list),n              'Referer': random.choice(referer_list)n    }n
  1. 最后,在main中,开启线程即可。
  # 创建一个线程锁,防止多线程写入文件时发生错乱n    mutex_lock = threading.Lock()n    # 线程数为50,在一定范围内,线程数越多,速度越快n    for i in range(50):n        t = threading.Thread(target=get_fund_data,name='LoopThread'+str(i))n        t.start()
  1. 通过对多线程和IP代理池的实践操作,能够更加深入了解多线程和爬虫的工作原理。当你在使用一些爬虫框架的时候,就能够做到快速定位错误并解决错误。

数据格式


000056,建信消费升级混合,2019-03-26,1.7740,1.7914,0.98,2019-03-27 15:00
000031,华夏复兴混合,2019-03-26,1.5650,1.5709,0.38,2019-03-27 15:00
000048,华夏双债增强债券C,2019-03-26,1.2230,1.2236,0.05,2019-03-27 15:00
000008,嘉实中证500ETF联接A,2019-03-26,1.4417,1.4552,0.93,2019-03-27 15:00
000024,大摩双利增强债券A,2019-03-26,1.1670,1.1674,0.04,2019-03-27 15:00
000054,鹏华双债增利债券,2019-03-26,1.1697,1.1693,-0.03,2019-03-27 15:00
000016,华夏纯债债券C,2019-03-26,1.1790,1.1793,0.03,2019-03-27 15:00

功能截图


配置说明

# 确保安装以下库,如果没有,请在python3环境下执行pip install 模块名n    import requestsn    import randomn    import ren    import queuen    import threadingn    import csvn    import json

股票配资代理招商加盟:帅哥美女们看过来啦,远大国际期货招商欢迎你们的加盟

远大期货招商加盟】 【远大期货招商加盟】 【远大期货招商加盟】 【远大期货招商加盟】 【远大期货招商加盟】


远大国际期货平台优势:



一,具备信管家行情交易软件,逸富行情交易软件,两种软件两种选择!



二,唰单,支持秒单,支持快捷键设置



三,正规平台,单子都是进市场的,可打交割单



四,一对一客服,技术全程指导和服务



五,佣金日返日返日返!



六,支持线上出入金。



七,出金时间:每周一到周五早上9点到下午5点,

入金时间:每周一到周五早上8.50到晚上12点,线上入金是24小时支持,自动秒到!




欢迎恒指吧加盟,股指期货代理。

1.开户:开户2分钟就能搞定,入金是秒到。

2.配资:配资比例20倍-40倍,客户最低5000元就可以买一手恒指,1万可以玩2手。强平线是客户本金的20%。

3. 返佣高:恒指手续费最低双边40港币/手,例如收客户150港币/手,返给加盟商110港币/手。

4. 利润高:加盟商每天有3-4个客户交易,交易量轻轻松松达到150手,日利润高达2万元左右。

5. 恒指期货交易软件:注册资本50亿中字头券商使用的服务器,不卡盘,不滑点,交易特别流畅,不会出现客户买不进总是挂单,平不了仓的问题。软件安装、界面都超级简单,不懂电脑的客户往往一看也就懂。

6. 本金盈利当天收盘后结算,16点30分收盘,资金在17点左右返还给代理商。本金和盈利部分当天就可结算,返佣部分周结

股票配资代理招商加盟:代理IP从哪找

由于开python培训有讲过爬虫的缘故,这个问题已经被ask无数次了,一般问的基友也都是爬虫防ban用的,那么在此,我把我个人尝试过的代理渠道都写一下。总体来讲,质量好的都不便宜,便宜的质量都比较渣,一分钱一分货

1)通过程序扫出来的代理

通过程序扫IP段、端口找出来的临时性代理。

诸如百度搜索“HTTP代理”,写着“每日更新”、“国内高匿免费”什么的都是这类,购买的话都很廉价。我用过的有:

西刺(免费代理IP_HTTP代理服务器IP_隐藏IP_QQ代理)

快代理(快代理 - 高速http代理ip每天更新)

站大爷

云代理(云代理 - 高速http代理ip每天更新)

......

基本都大同小异,没有哪个好那个坏,几个平台提供的代理至少有3成的重复率。

这类代理,有效期都不高,即便批量验证过在使用时还是会废掉一部分,可以应付低效率的采集、刷单次访问量,但是搞别的的还是算了吧

2)ADSL拨号服务器

ADSL拨号,断线重连切IP,淘宝有卖的,限定地区拨号、全国拨号都有。相对较稳定,至少比扫描出来的强很多,但切换IP耗时较长,需要几秒到1分钟之间。

所以如果采集是每访问一次切一次IP的话,效率会很慢,只能等当前IP被对方ban掉的时候在拨号换新的IP。

去年刷百度下拉、搞百度点击器的代理切换曾用过ADSL拨号,比较稳定,有些效果,当然也用过上面扫出来的代理,太烂,没法用。但是限于换IP需要断线重连,导致不容易并发执行任务,所以要大规模化要有些成本。

ADSL拨号可以应付对效率要求不高的采集、刷访问量、刷点击之类的。

3)第三方访问

比如通过“谷歌网页翻译”、“有道网页翻译”、“http代理浏览器”等第三方访问渠道请求目标网页。

速度慢,且采集捕获目标内容的时候多了很多干扰。

4)VPN软件

诸如“flyvpn”、“green vpn”,采集是IP被ban了直接换一个,VPN软件本身靠谱代理还是挺稳定的,就是人得在电脑旁边,手动换一次。但是偶尔查查几万关键词的百度排名、几万页面收录,用VPN还是挺悠闲的,这点量级总共也换不了多少次。

5)自建代理

买一台服务器,利用squid+stunnel搭建一台HTTP高匿代理服务器,Tinyproxy也行。squit用来实现http代理,stunnel在代理的基础上建一条隧道实现加密。

如果觉得ip数量少,就多买几台服务器,依次配置squid~~

由于是自建代理,都是独享且是真实的IP,所有相当稳定。采集、抢购、刷票、刷点击、刷主播人气什么的都可以干,只有有钱上机子就行~~

去年接了一个爬虫单子,抓国外某股票网站,共千万页面量级,反爬虫做的挺恶心,无奈买了20台低配机子做HTTP代理服务器,一个月5000成本~~

5)自建代理服务商

如果上面方法自己懒得搞,也没有关系。找个做类似服务的商家,开个api端口即可。

国外的有:

Crawlera ( Web Crawling Platform & Data as a Service )

......

国内的有:

阿步云(阿布云代理 - 最专业、最稳定、IP最丰富的高匿名HTTP代理IP提供商)

鲲鹏代理(IPRENT - 国内最专业稳定高匿独享HTTP代理解决方案提供商)

瀚云代理(瀚云代理 – http代理ip)

......

Crawlera和阿步云都用过,除了贵都挺好的,另外在请求频率和并发数上有限制。没办法,要一个ip共享给10个人,每个人并发100,费用又不涨,他们那边得赔死,光带宽费就海里去了。

------------------------------------------------------------------------------------------

扫描下图右下角二维码,关注“流量贩子”微信公众号。

股票配资行业为什么这么喜欢软文推广?

相关阅读

股指期货if1502