网络爬虫股票信息

首先解决一下之前那篇博客遇到的关于中文乱码的问题,在sublime3中无法打印中文的问题。今天问了一个同事,帮我解决了这个问题

import io
import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
在win7中,python的 默认编码不是'utf-8',改一下python的默认编码成'utf-8'就行了。在上面那行代码中,修改了python的默认编码为utf8,并赋予了stdout输出,使得python的输出默认编码为utf8,这样在sublime中就可以使用print函数正常打印中文了。

好了,现在进入今天的正题,今天学习了一个用python爬虫新浪股票信息的程序,拿出来跟大家分享。

首先还是引入需要的模块和设置标准输出编码

# -*- coding:utf-8 -*-
# 需要打印中文字符
import io
import sys
import requests
import threading
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
这些代码的意思不用说了。接着我们需要定义几个函数,由于在这个程序里需要使用多线程编程,因此需要引入threading的模块,这个模块在python3中做了一些修改,有关python2和python3的区别我会在另外一篇文章中说明。

接下来是定义三个函数。

def displayInfo(code):
	url = 'http://hq.sinajs.cn/list=' + code
	response = requests.get(url).text
	print(response)

def singleThread(codes):
	for code in codes:
		code = code.strip()
		displayInfo(code)

def multiThread(tasks):
	threads = []
	for task in tasks:
		threads.append(threading.Thread(target = singleThread, args = (task, )))
	for thread in threads:
		thread.start()
	for thread in threads:
		thread.join()

第一个函数displayInfo主要是打印出来程序运行的结果,这里面使用了一个模块requests,来对网络中的内容进行请求。之前曾经用过urllib这个模块,但是由于urllib这个模块会有一个漏洞,同时封装的也不是很好,现在大家都已经摒弃了urllib,而改用requests模块了。我们这里只要打印纯文本就好。

第二个函数是把每一支股票都调用displayInfo来打印出来,这里每一支股票都有唯一的一个code。我这里遵循的原则就是尽量一个函数只做一件事情,这样函数的封装和复用会比较好。

第三个函数是启用多进程。首先是根据参数tasks中元素的数量来确定启几个进程,之后分别启动进程,然后等待进程结束。

最后一部分代码就是调用这个三个函数,其实只是调用第三个函数而已。

if __name__ == '__main__':
	codes = ['sh600001', 'sh600002', 'sh600003', 'sh600004', 'sh600005']
	thread_len = int(len(codes) / 4)
	t1 = codes[0 : thread_len]
	t2 = codes[thread_len : thread_len * 2]
	t3 = codes[thread_len * 2 : thread_len * 3]
	t4 = codes[thread_len * 3 : ]

	multiThread([t1, t2, t3, t4])

首先给一个main函数入口,然后构造codes数组,之后把codes数组作为参数传入multiThread中,调用该函数,去新浪中查找想要的数据。下面是最后的运行结果。


这个网络爬虫程序算是比较简单了,并没有设置head去爬数据,所以很容易被有些网站认为爬虫程序而被拒绝。今天的小例子只是想和大家一起体会一下爬虫是个什么东西,同时这里也用到了多线程编程,这也是python语言的一个特点。

今天的内容就是这些了。

与您共勉!










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值