最近测试过程中需要造一些数据,又要实时更新。所以写了一个python小爬一下数据。爬虫网上很多,初略学习了一下,有点小心得,做个笔记记一下。刚开始的时候跟朋友导论了一下爬下来的数据怎么样处理,导论下来的实践方式大概有两种:1、把数据读取下来后直接存入数据库,不需要消耗服务端的资源,2、服务器加一个接口在每次爬到数据后,就往数据库里存。第二种方法虽然消耗了服务器资源,但是这样可以减少操作数据库的风险,而且可以在半夜的时候再执行,这样可以大大的提高cpu的使用。
虽然不再直接往数据库中存储了,但是觉得还是可以记下来。
(1)爬虫当然需要链接网址,一般链接网址方法:
打开一般的网址可以使用:urllib2中的urlopen(url);这样就会getrequest 网址源码了,但是很多网址都要有个headers;所以还需要在打开前加个一个头部,这样整体的网址请求就出来了:
url = http://www.xxxx.html
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request)
response 获取到了整个网站的源码信息。因为本地python默认编码为:uft-8。
所以一般要做这样的处理:response= response.read().decode('utf-8')
respone获取到数据后,下来就是筛选了,那就是使用python正则,如: pattern = re.compile('<p><a.*?target=(.*?)>(.*?)</a></p>',re.S)
引号中的为匹配的内容,这里要注意::一定要两个()或是两个以上,不知道什么原因,不然后面使用到组数时一直报越界。
然后使用findall匹配源码。getneed=re.findall(pattern,response);再使用for循环就可以把获取到的内容print或存起来了。
如存入i[]中:
for i in getneed:
print i[0],i[1]
i[0]表示每次匹配到的第一个()中的内容,每次匹配到存起来就可以了;(i[1]同理)
(2)将存到数据库中。
首先需要安装数据库的python驱动,我是使用mysql的,这个再官网上可以下载到。安装好后,链接数据库就可以操作数据库了。
import mysql.connector as dbu 注意import的是mysql包中的connector。
conn=dbu.Connect(host="localhost", user="root", passwd="",db='test')
cmd=conn.cursor()
cmd.execute(cmdbk)
把(1)中获取的数据添加到cmdbdk中就好了。
(3)调接口,通过接口来将数据存入数据库;
直接记下代码需要注意的东西吧。
data = {'xx':getcontent,'yy':getorg} 发送数据的格式
data_urlencode = urllib.urlencode(data)
requrl = "http:///putData" 接口地址
req = urllib2.Request(url = requrl,data =data_urlencode)
print req 请求后返回内容
res_data = urllib2.urlopen(req)
res = res_data.read()
print res 响应
很晚了,睡觉啦,小记一下~~