JAVA环境windows搭建以及基础web项目新建

1.官网下载JDK
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
按照大部分按照软件推荐安装即可,安装地址可按照个人喜好更换,JDK和JRE最好装在同一文件目录下(方便以后查找)。CMD中输入java -version,若出现Java版本信息则安装成功
2.官网下载tomcat
https://tomcat.apache.org/download-80.cgi
推荐下载安装版本,这样就不需要自己去配环境变量,能打开tomcat目录里的bin文件下的TomcatX.exe基本即可,若不放心可以在浏览器输入地址:localhost:8080, 会出现tomcat主页即为成功。
3.官网下载maven
http://maven.apache.org/download.cgi
推荐下载Binary zip archive  apache-maven-X.X.X-bin.zip,这个是无源代码的版本。
然后配置好自己的maven目录下conf文件的settings.xml: 这里主要需要配置本地maven仓库地址<localRepository>D:\myTools_2018\mavenLib</localRepository>
和maven镜像地址(<mirrors>里面配置)
4.官网下载eclipse
https://www.eclipse.org/downloads/
eclipse解压放到自己需要的地方,然后打开eclipse选择eclipse工作目录;
配置刚才2,3步骤配好的tomcat和maven:
window-->preferences-->server-->runtime environments --> add 然后选择对应的tomcat版本,选择刚才的tomcat安装地址即可。
window-->preferences-->maven-->user setting 选择刚才maven安装的地址,update setting保存即可。
5.新建简单的dynamic web项目,file-->new-->Dynamic web project 输入项目名即可生成一个web项目。
6.在webContent中添加html,css等等,本次我写了个index.html;在Java Resource中的src目录下写Java代码,HttpServlet在tomcat的servlet-api.jar里面,所以需要引入该jar包,也需要在webContent-->lib-->web.xml 中写入,eg:
<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>



HelloWorld
/HelloWorld

7.servers新建一个server,然后加入新建的项目,启动server,成功后就可以在页面访问刚才的index.html和那个HelloWorld,eg:
http://localhost:8080//Test//index.html
http://localhost:8080//Test//HelloWorld
至此,Windows本地环境搭建成功。

PHP环境搭建之windows篇

Apache

下载

安装

以下安装方式是基于zip安装包的方式,并且是httpd-2.4.18-win64-VC14.zip,也就是基于visual studio 2015版本的Apache

  1. 解压zip包到任意目录,比如 D:\Study\Apache\,此时,该目录下多了一个Apache24文件夹以及连个文件:-- Win64-2.4.18 VC14 --ReadMe.txt
  2. 打开ReadMe.txt,找到安装部分的说明
Install
-------


- Unzip the Apache24 folder to c:/Apache24 (that is the ServerRoot in the config).
  Default folder for your your webpages is DocumentRoot "c:/Apache24/htdocs"

  When you unzip to an other location, change ServerRoot in the httpd.conf,
  and change in httpd.conf the Documenroot, Directories, ScriptAlias,
  also when you use the extra folder config file(s) change to your location there. 

Start apache in a DOS box:

>httpd.exe

Install as a service:

>httpd.exe -k install

ApacheMonitor:

Double click ApacheMonitor.exe, or put it in your Startup folder.

第一步解压已经完成,后面有两种启动方式,一种是命令行直接启动,一种是安装作为一个服务来启动,我们先用第一种方式
3. 进入Apache24目录下面的bin,我们可以发现确实存在httpd.exe文件,在bin目录下打开命令行,直接输入httpd.exe,我们发现并没有启动成功,报错了
启动错误
显然是因为我们第一步的时候没有按照规定的路劲解压zip导致配置跟现在的路劲不匹配导致,因此,我们可以把文件移动到C盘,也可以修改配置文件,在此我们修改配置文件,把conf/httpd.conf文件的37行修改为

ServerRoot "D:/Study/Apache/Apache24"

然后再启动,发现还是有错误,
启动错误DocumentRoot
这次的是DocumentRoot目录找不到,DocumentRoot目录主要就是放置我们的网站内容的目录,因此这里也可以改成任意位置,这里,我改成了F:/Workspace/www。修改完了后,再次启动, 发现一切正常O(∩_∩)O哈哈~,浏览器打开localhost发现啥都没有,因为我们的网站暂时没有内容,我们可以在F:/Workspace/www下建一个html文件来测试是否正常。

  1. F:/Workspace/www目录下新建一个index.php文件,并且输入内容
<?php
echo phpinfo();

然后刷新浏览器,发现浏览器并没有显示对应的信息,只是显示了

Index of /
index.php

显然这是不正常的,我们要的是要显示当前PHP的信息,这是为啥呢,因为,咱们只是单纯的配置好了Apache,并没有配置好PHP的环境

PHP

下载

安装

我们这里用的是PHP7.0.29版本

  • 解压下载的zip包到D:\Study\PHP\7.0.29,此时D:\Study\PHP\7.0.29目录下有一个php.exe文件
  • 复制一份php.ini-development改名为php.ini
  • 打开php.ini,并且找到extension_dir,将windows前面的那个分号去掉
    > 如果后续有问题,可以将这里的路径改成绝对路径
  • 打开Apache的配置文件conf\httpd.conf,找到LoadModule区域,在其后加入:
LoadModule php7_module "D:\Study\PHP\7.0.29\php7apache2_4.dll"
PHPIniDir "D:\Study\PHP\7.0.29\" #告诉Apache PHP的安装路径
  • 查找 AddType application/x-gzip .gz .tgz,在其下一行添加代码:AddType application/x-httpd-php .php .html
  • 重启Apache,然后刷新浏览器,发现还是一样,url改成localhost/index.php,然后居然正常了
  • 查找DirectoryIndex,在index.html前面加上index.php,重启,刷新,一切正常,完美(#^.^#)

开启多端口站点

  • 在Apache的httpd.conf文件找到Include conf/extra/httpd-vhosts.conf,删除前面的 #
  • 在Apache的httpd.conf文件找到Listen 80,在下方增加Listen 8200
  • 找到extra/httpd-vhosts.conf增加目录,如下:
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "F:/Workspace/www/80"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:8200>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "F:/Workspace/www/8200"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
  • 重启Apache

开启rewrite模块

  • 在Apache的httpd.conf文件找到LoadModule rewrite_module modules/mod_rewrite.so,删除前面的 #
  • 找到DocumentRoot下的AllowOverride None,改为AllowOverride All

Python爬虫之requests的基本使用

概述

本章节主要介绍本项目中需要用到的知识点

导入模块

要使用requests模块,首先需要导入该模块,如:import requests

发送请求

requests能够发送几乎所有类型的网络请求,如GETPOSTPUTPATCHDELETEHEADOPTIONS等,具体使用如下:

r = requests.get('https://www.baidu.com')
r = requests.post(https://www.baidu.com)
r = requests.put('https://www.baidu.com')
r = requests.patch('https://www.baidu.com')
r = requests.delete('https://www.baidu.com')
r = requests.head('https://www.baidu.com')
r = requests.options('https://www.baidu.com')

正如上面的各种方法,每一种网络请求其实都是requests模块(对象)的一个属性,直接调用该方法就可以发送具体的网络请求

GET请求

在这里,我们主要通过一个小例子来具体介绍一下GET请求的用法,其他方法的请求类似,就不一一细说了
小墨鱼在逛论坛,突然看到篇文章介绍,Chrome非常好用,然后A君内心蠢蠢欲动,这个时候,他就打开了个网页,叫做百度一下,网址是:https://www.baidu.com/,他在页面上中间的输入框部分输入了Chrome,然后页面就跳转到了一个新的页面,网址为:

https://www.baidu.com/s?wd=Chrome&rsv_spt=1&rsv_iqid=0xd977689a0002d37b&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_sug3=7&rsv_sug1=6&rsv_sug7=101&rsv_t=f286JF3qYNnhAfxAhxzUpQAPb%2F4%2F0mCrJTGW5uz5b8nGl17Af%2FJZthpqEzH1OdImeLci&inputT=5129&rsv_sug4=5641

该页面就跟上面的网址一样复杂,内容繁多,小墨鱼看得眼花缭乱,感觉第一页的内容都不是他想要的,然后他点了一下第二页,然后啪啦啪啦,又有一个新的网址:

https://www.baidu.com/s?wd=Chrome&pn=10&oq=Chrome&tn=baiduhome_pg&ie=utf-8&usm=4&rsv_idx=2&rsv_pq=a32297f7000327f8&rsv_t=6200AfhaY4p18yGFKXyTcWxLipZ%2FR%2Bb2yt7S3phVvOoEJ7GR5%2BfRJ8muChccyKPzMKDm

由于小墨鱼家里的网速不太好,页面加载内容有点慢,作为半个程序猿的小墨鱼无法忍受这些事情,而他又想ZZB,然后他分析了一下这三个网址,采用最笨拙的方法,在浏览器删除URL的参数(具体过程就不细述啦(#^.^#)),最终得到了两个重要的信息

  • wd: 搜索的关键字
  • pn: 页码的编号,第二页为10,第三页为20,以此类推

小墨鱼兴高采烈地打开了VS Code,准备用他这两天学习的Python来模拟浏览器请求这个网页。

发送GET请求

import requests

url = 'https://www.baidu.com'
rsp = requests.get(url)
print(rsp)

执行上面的代码,我们在命令行里面打印了

打印出来的信息告诉我们,我们发送的请求得到了回应,并且http的状态码为200,也就是说,我们的请求成功发送,并且成功返回了。
但是,相对来说,我们更想知道返回的内容。

响应内容

我们首先可以查看rsp的属性,如下:

['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']

其中,json主要是用来处理json数据格式的响应,contenttext都可以查看响应的内容,这两个的区别主要在于编码

text

通过print(rsp.text)我们发现,命令行报错了,这里面主要是因为,使用rsp.text的时候,Requests会自动解码来自服务器的内容.大多数unicode 字符集都能被无缝地解码。但是本页面就有特殊的。。。,为此,我们手动转码,转码后可以正常显示

print(rsp.encoding)
rsp.encoding = 'utf-8'
print(rsp.text)

content

同上,print(rsp.content)虽然没有报错,但是打印出来的中文乱码了,因为rsp.content不会自动转码,而它的格式默认是bytes,可以用decode解码,也就是rsp.content.decode('utf-8')

json

json的使用方式为,rsp.json()这里主要是将json格式的字符串转换为json对象,当然也可以用json模块进行转换

请求参数

以上所说的都是请求百度首页,但是如果我们想要搜索Chrome呢,我们根据分析已经知道具体的URL是: https://www.baidu.com/s?wd=Chrome,相对请求首页来说,这里面多了参数,url的参数,也就是我们GET方法的参数
GET方法我们有两种方式来处理参数,第一种是直接拼接到URL上面去,也就是说我们可以请求该地址

import requests


url = 'https://www.baidu.com/s?wd=Chrome'
rsp = requests.get(url)

另一种就是用requests模块封装好的方法,Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。

import requests


url = 'https://www.baidu.com/s'
params = {
    'wd': 'Chrome'
}
rsp = requests.get(url, params=params)

然而,执行了上面的代码,并没有得到我们想要的结果,并没有返回相对应的页面,这是为啥呢,且听下回分解。。。O(∩_∩)O哈哈~