爬虫:自动抓取互联网上信息的程序,有效地利用互联网上的数据;简单爬虫架构如下:
网页下载器:将Url对应的网页下载到本地,存储成本地文件或内存字符串,Python的文件下载器有:urllib2(Python基础模块)、requests(第三方包):
下载网页的方法:
方法一:
import urllib2
response = urllib2.urlopen('http://www.baidu.com')
print response.getcode() #返回200表示获取成功
cont = response.read() #读取内容
方法二:
import urllib2
request = urllib2.Request(url) #创建Requset对象
request.add_data('a','1') #添加数据
request.add_header('User-Agent','Mozilla/5.0') #添加http的header
response = urllib2.urlopen(request) #发送请求获取结果
特殊情景的处理器
HTTPCookieProcessor ProxyHandler HTTPSHandler HTTPRedirectHandler
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
urllib2.urlopen(url)
urllib2.urlopen(request)
例:cookie的处理
import urllib2,cookielib
cj = cookielib.CookieJar() #创建cookie容器
opener = urllib2.build_opener(urllib2,HTTPCookieProcessor(cj)) #创建一个opener
urllib2.install_opener(opener) #给urllib2安装opener
response = urllib2.urlopen("http://www.baidu.com/") #使用带有cookie的urllib2访问网页
三种方法的测试
import urllib2,cookielib
url = "http://www.baidu.com"
print "第一种方法"
response1 = urllib2.urlopen(url)
print response1.getcode()
print len(response1.read())
print "第二种方法"
request = urllib2.Request(url)
request.add_header('user-agent','Mozilla/5.0')
response2 = urllib2.urlopen(request)
print response2.getcode()
print len(response2.read())
print "第三种方法"
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
response3 = urllib2.urlopen(url)
print response3.getcode()
print cj
print response3.read()
结果如下: ———-
Beautiful Soup 第三方库,用于从HTML或XML中提取数据。
安装:
python -m pip install beautifulsoup4
测试:
import bs4
print bs4
测试代码:
# -*- coding: GBK-*-
from bs4 import BeautifulSoup
import re
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc,'html.parser',from_encoding = 'utf-8')
print '获取所有的链接'
links = soup.find_all('a')
for link in links:
print link.name, link['href'],link.get_text()
print '获取lacie的链接'
link_node = soup.find('a',href = 'http://example.com/lacie')
print link_node.name,link_node['href'],link_node.get_text()
print "正则匹配"
link_node = soup.find('a',href=re.compile(r"ill"))
print link_node.name,link_node['href'],link_node.get_text()
print '获取P段落文字'
p_node = soup.find('p',class_="title")
print p_node.name,p_node.get_text()
结果:
Ref:[1] Python开发简单爬虫项目
VS2010(Win7 32位系统)配置OpenGL方法:
测试代码:
#include <gl\glut.h>
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow(“Hello,OpenGL!”);
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
结果:
OpenCL devices
Goals of OpenCL
Data-parallel algorithms that are computationally significant.
Where OpenCL can be used :
OpenCL程序主要是分两部分,一部分是在设备上执行(GPU),另一部分是在主机上运行(CPU)。在设备上执行需要写一个Kernel函数,由OpenCL语言编写;OpenCL语言在C语言的基础上加了一些约束、关键字和数据类型。在主机运行的程序提供了API,主机程序可以用C/C++编写,控制OpenCL的环境(上下文,指令队列等)。
Kernel 是设备程序执行的入口点,即唯一可以从主机上调用执行的函数。
SIMT 单指令多线程(Single Instruction Multi Thread),相同代码在不同线程中并行执行,每个线程使用不同的数据来执行同一段代码。
Work-item 工作项,类似CUDA Threads,是最小的执行单元。 Work-group 工作组,允许工作项之间通信和协作,类似于CUDA Thread Blocks
ND-Range 是下一个组织级别,定义了工作组的组织形式。
安装VS2010,安装OpenCV2.4.9;将OpenCV加入系统环境变量:
配置VS2010中的“属性管理器”中的“包含目录”和“库目录”;以及链接器,输入,附加依赖项中加入F:\opencv249\build\x86\vc10\lib下*.lib文件:
将某一目录下的所有文件名输出到txt文件的DOS命令:
以上为VS2010配置OpenCV2.4.9的全部步骤。
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
//Mat img = imread("F:\\opencv249\\sources\\samples\\cpp\\lena.jpg",CV_LOAD_IMAGE_UNCHANGED); //注 \为转义字符
Mat img = imread("F:/opencv249/sources/samples/cpp/lena.jpg",CV_LOAD_IMAGE_UNCHANGED);
//Mat img = imread("fruits.jpg",CV_LOAD_IMAGE_UNCHANGED); //当前目录下的文件
if(img.empty())
{
cout<<"图像加载失败!"<<endl;
system("pause");
return -1;
}
namedWindow("MyWindow",CV_WINDOW_AUTOSIZE);
imshow("MyWindow",img);
waitKey(0);
return 0;
}
好了,到这里配置已经完全结束了,可以继续以后的OpenCV学习啦~~~~~
注:
My OpenCV3.2_withsource + VS2012/VS2015 config:
① 包含目录:
D:\opencv-3.2.0_withsource\build\install\include
D:\opencv-3.2.0_withsource\build\install\include\opencv
D:\opencv-3.2.0_withsource\build\install\include\opencv2
②库目录:
D:\opencv-3.2.0_withsource\build\install\x86\vc14\lib
附加依赖项:
opencv_world320d.lib
最近在学习了GitHub Pages,因此也很想搭建一个自己的博客,但是一直忙于毕业论文,所以一直也没弄好。Google了一番之后,选择了GitHub的Jekyll模板来搭建自己的博客。
在jekyll的官网上 http://jekyllrb.com/ 其实已经说得比较明白了,我在这里还是简单的说一下吧。我用的是Windows系统。
主要环节有:安装Ruby,安装RubyGems,安装jekyll,安装代码高亮插件,安装node.js
ruby官网下载安装:https://www.ruby-lang.org/en/downloads/
安装完成后配置环境变量
在命令提示符中,得到ruby版本号,如下图,即安装成功
官网下载 http://rubygems.org/pages/download rubygems-2.4.5.zip
cd到RubyGems目录
执行安装
执行下面的语句安装
安装结束画面
至此jekyll就已经安装完毕了,后续就是个性化的自己设定了。
在d盘新建一个工作区jekyllWorkspace
cd到jekyllWorkspace
执行jekyll new name创建新的工作区
文件结构如下:
cd到博客文件夹,开启服务器
watch为了检测文件夹内的变化,即修改后不需要重新启动jekyll
我的环境下启动报错(你的可能没有),再安装yajl-ruby和rouge
再次启动服务器成功
访问 http://localhost:4000/
详细文章页面