精华内容
下载资源
问答
  • 如何建立一个属于自己的网站(小白教程)

    万次阅读 多人点赞 2018-12-19 15:26:26
    多人都希望能有一个自己的博客网站,但是却只能停留在想的阶段,毕竟很多人其实是不懂开发技术的,但是实际上一个博客网站远远没有我们想想的那么复杂,即便是我们不懂技术也可以做一个自己的网站。那么接下就是具体...

    多人都希望能有一个自己的博客网站,但是却只能停留在想的阶段,毕竟很多人其实是不懂开发技术的,但是实际上一个博客网站远远没有我们想想的那么复杂,即便是我们不懂技术也可以做一个自己的网站。那么接下就是具体操作了,那么我们首先要了解的是什么是域名和服务器

    1. 什么是域名和服务器

    域名就是用户访问网站的时候,输入的网址,已www开头的域名就是国际域名,不以www开头的域名,都称为子域,域名的www表示world wide web万维网。域名后缀是有意义的,比如.con表示company公司的意思,.cn表示china中国的意思,.gob表示goverment政府机构、组织的意思,.cc也表示company公司的意思。

    域名就相当于一个车牌,车就相当于服务器,服务器是什么呢?服务器管理软件的计算机,这种计算机24小时不断电的,是一直开机的。并且这种计算机要比我们平时自己用的笔记本电脑、家用PC计算机性能强大很多。这种计算机就有伺服的能力,就是能够存储网站上的内容,让用户访问。

    服务器就是这样子的,我们买的是虚拟主机,为什么要用虚拟主机呢?由于多台虚拟主机共享一台真实主机的资源,每个虚拟主机用户承受的硬件费用、网络维护费用、通信线路的费用均大幅度降低,Internet真正成为人人用得起的网络。虚拟主机是什么:一般来说,一个域名对应一个服务器,所有诞生了虚拟化的产品,就是一个服务器上能够运行很多网站,这样以来,平均每个网站的成本就大大降低。普通老百姓也买的起。知道了这些我们需要做哪些准备:

    1. 你有一个Email。推荐使用163的邮箱(尽量不要使用qq邮箱,这是因为我们需要qq邮箱进行企业域名邮设置,为了不冲突,你尽量准备一个163的邮箱)
    2. 能够网上付款
    3. 域名的购买

    域名的提供商,简称ISP。国内比较有名的ISP有:新网、万网新网:http://www.xinnet.com

    万网:https://wanwang.aliyun.com

    美橙互联:https://www.cndns.com/

    在这些网站上进行域名的购买,都是大同小异的。

    详细步骤:

    付款成功后,你的域名就购买好了。你的邮箱里面就会收到一封邮箱,里面有邮箱和密码非常重要千万不能泄露

    先点击注册按钮
    填写好信息后点击注册
    登录成功后,输入你想购买的域名
    千万不要选择.cn域名,因为.cn的域名需要到工业及信息化部备案 备案,备案的过程是很繁琐的。所有我们购买.com的域名

    选择你要购买的年限

    点击结算

    可以使用默认的模本,也可以使用新建模本,填写完信息,点击提交
    填写完信息,点击提交,就到付款界面
    支付成功

    付款成功后,你的域名就购买好了。你的邮箱里面就会收到一封邮箱,里面有邮箱和密码非常重要千万不能泄露

    Sonshu51.com已经购买完毕了。相当我们已经买好了车牌

    虚拟主机的购买

     

    虚拟主机说一下:政策限制,所有在中国大陆内的服务器都必须进行备案。但备案是很复杂漫长的过程。我们同学做的网站,都是用于找工作的个人网站,不涉及商业内容、更不涉及违法内容。购买境外的服务器(比如我国香港特别行政区或者国外等)是不需要备份的。即使购买了境外的服务器也绝对不能出现任何违法内容!

    百度搜索香港主机就可以搜索到了,可以自由发挥

    推荐https://www.henghost.com/help/

    先注册成他们的会员,才可以购买
    建议选择香港,刚刚买好了域名,就选择下一个,填写自己刚刚购买的域名
    支付
    支付成功,会把你购买的虚拟机的信息发到你的邮箱中
    你会收到这样一封邮箱

    域名解析

    所谓域名解析,就是是我们购买的域名和空间产生绑定关系

    进行域名解析的地方,是你刚才注册域名的时候的这个网站
     点击进入
     登录域名自助管理系统,访问邮件中给你的地址,可以在这里解析,也可以在下面解析
     在新网登陆账号,点击我的产品
     找到你所购买的域名点击解析
     可以选择你添加的记录类型,记录值返服务器的

    FTP管理

    FTB就是文件传输协议,指的是用专业的FTP软件,远程管理我们的服务器的。教学用的FTP是8uftp,到应用商店就可以下载了

    打开软件

    填写我们购买的虚拟主机的相关信息。这些信息,就可以从Enail得到

    输入地址、密码、密码之后,点击链接,将会看见右半部分出现目录,

    左边窗口就是我们自己的计算机中的文件、而右边的窗口就是我们的服务器上的文件

    进入public_html文件夹,然后清空里面的所有文件。这个文件夹就是我们网站的根目录

    注意:如果打不开public_html文件夹,就找到这个路径

    上传你的html,重点首页必须为index.html开头的html

    到此你的网页就OK了

     

     

    展开全文
  • 手把手教你利用爬虫爬网页(Python代码)

    万次阅读 多人点赞 2019-05-14 14:34:48
    本文主要分为两部分:部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以...

    640?wx_fmt=jpeg

    本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力。


    01

    网络爬虫概述


    接下来从网络爬虫的概念、用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解。

    1. 网络爬虫及其应用

    随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战,网络爬虫应运而生。网络爬虫(又被称为网页蜘蛛、网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。下面通过图3-1展示一下网络爬虫在互联网中起到的作用:


    640?wx_fmt=png

    ▲图3-1 网络爬虫


    网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。

    搜索引擎(Search Engine),例如传统的通用搜索引擎baidu、Yahoo和Google等,是一种大型复杂的网络爬虫,属于通用性网络爬虫的范畴。但是通用性搜索引擎存在着一定的局限性:

    1. 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。

    2. 通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。

    3. 万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。

    4. 通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。

    为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。

    聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择地访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

    说完了聚焦爬虫,接下来再说一下增量式网络爬虫。增量式网络爬虫是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。

    和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。

    例如:想获取赶集网的招聘信息,以前爬取过的数据没有必要重复爬取,只需要获取更新的招聘数据,这时候就要用到增量式爬虫。

    最后说一下深层网络爬虫。Web页面按存在方式可以分为表层网页和深层网页。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。

    例如用户登录或者注册才能访问的页面。可以想象这样一个场景:爬取贴吧或者论坛中的数据,必须在用户登录后,有权限的情况下才能获取完整的数据。

    2. 网络爬虫结构

    下面用一个通用的网络爬虫结构来说明网络爬虫的基本工作流程,如图3-4所示。


    640?wx_fmt=png

    ▲图3-4 网络爬虫结构

    网络爬虫的基本工作流程如下:

    1. 首先选取一部分精心挑选的种子URL。

    2. 将这些URL放入待抓取URL队列。

    3. 从待抓取URL队列中读取待抓取队列的URL,解析DNS,并且得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4. 分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。

    02

    HTTP请求的Python实现


    通过上面的网络爬虫结构,我们可以看到读取URL、下载网页是每一个爬虫必备而且关键的功能,这就需要和HTTP请求打交道。接下来讲解Python中实现HTTP请求的三种方式:urllib2/urllib、httplib/urllib以及Requests。

    1. urllib2/urllib实现

    urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅。

    1.1 首先实现一个完整的请求与响应模型

    urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式是:

    
     

    import urllib2
    response=urllib2.urlopen('http://www.zhihu.com')
    html=response.read()
    print html

    其实可以将上面对http://www.zhihu.com的请求响应分为两步,一步是请求,一步是响应,形式如下:

    
     

    import urllib2
    # 请求
    request=urllib2.Request('http://www.zhihu.com')
    # 响应
    response = urllib2.urlopen(request)
    html=response.read()
    print html

    上面这两种形式都是GET请求,接下来演示一下POST请求,其实大同小异,只是增加了请求数据,这时候用到了urllib。示例如下:

    
     

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    # info 需要被编码为urllib2能理解的格式,这里用到的是urllib
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    html = response.read()

    但是有时会出现这种情况:即使POST请求的数据是对的,但是服务器拒绝你的访问。这是为什么呢?问题出在请求中的头信息,服务器会检验请求头,来判断是否是来自浏览器的访问,这也是反爬虫的常用手段。

    1.2 请求头headers处理

    将上面的例子改写一下,加上请求头信息,设置一下请求头中的User-Agent域和Referer域信息。

    
     

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    referer='http://www.xxxxxx.com/'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    # 将user_agent,referer写入头信息
    headers={'User-Agent':user_agent,'Referer':referer}
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url, data,headers)
    response = urllib2.urlopen(req)
    html = response.read()

    也可以这样写,使用add_header来添加请求头信息,修改如下:

    
     

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    referer='http://www.xxxxxx.com/'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url)
    # 将user_agent,referer写入头信息
    req.add_header('User-Agent',user_agent)
    req.add_header('Referer',referer)
    req.add_data(data)
    response = urllib2.urlopen(req)
    html = response.read()

    对有些header要特别留意,服务器会针对这些header做检查,例如:

    • User-Agent:有些服务器或Proxy会通过该值来判断是否是浏览器发出的请求。

    • Content-Type:在使用REST接口时,服务器会检查该值,用来确定HTTP Body中的内容该怎样解析。在使用服务器提供的RESTful或SOAP服务时,Content-Type设置错误会导致服务器拒绝服务。常见的取值有:application/xml(在XML RPC,如RESTful/SOAP调用时使用)、application/json(在JSON RPC调用时使用)、application/x-www-form-urlencoded(浏览器提交Web表单时使用)。

    • Referer:服务器有时候会检查防盗链。

    1.3 Cookie处理

    urllib2对Cookie的处理也是自动的,使用CookieJar函数进行Cookie的管理。如果需要得到某个Cookie项的值,可以这么做:

    
     

    import urllib2
    import cookielib
    cookie = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    response = opener.open('http://www.zhihu.com')
    for item in cookie:
        print item.name+':'+item.value

    但是有时候会遇到这种情况,我们不想让urllib2自动处理,我们想自己添加Cookie的内容,可以通过设置请求头中的Cookie域来做:

    
     

    import  urllib2
    opener = urllib2.build_opener()
    opener.addheaders.append( ( 'Cookie''email=' + "xxxxxxx@163.com" ) )
    req = urllib2.Request( "http://www.zhihu.com/" )
    response = opener.open(req)
    print response.headers
    retdata = response.read()

    1.4 Timeout设置超时

    在Python2.6之前的版本,urllib2的API并没有暴露Timeout的设置,要设置Timeout值,只能更改Socket的全局Timeout值。示例如下:

    
     

    import urllib2
    import socket
    socket.setdefaulttimeout(10# 10 秒钟后超时
    urllib2.socket.setdefaulttimeout(10# 另一种方式

    在Python2.6及新的版本中,urlopen函数提供了对Timeout的设置,示例如下:

    
     

    import urllib2
    request=urllib2.Request('http://www.zhihu.com')
    response = urllib2.urlopen(request,timeout=2)
    html=response.read()
    print html

    1.5 获取HTTP响应码

    对于200 OK来说,只要使用urlopen返回的response对象的getcode()方法就可以得到HTTP的返回码。但对其他返回码来说,urlopen会抛出异常。这时候,就要检查异常对象的code属性了,示例如下:

    
     

    import urllib2
    try:
        response = urllib2.urlopen('http://www.google.com')
        print response
    except urllib2.HTTPError as e:
        if hasattr(e, 'code'):
            print 'Error code:',e.code

    1.6 重定向

    urllib2默认情况下会针对HTTP 3XX返回码自动进行重定向动作。要检测是否发生了重定向动作,只要检查一下Response的URL和Request的URL是否一致就可以了,示例如下:

    
     

    import urllib2
    response = urllib2.urlopen('http://www.zhihu.cn')
    isRedirected = response.geturl() == 'http://www.zhihu.cn'

    如果不想自动重定向,可以自定义HTTPRedirectHandler类,示例如下:

    
     

    import urllib2
    class RedirectHandler(urllib2.HTTPRedirectHandler):
        def http_error_301(self, req, fp, code, msg, headers):
            pass
        def http_error_302(self, req, fp, code, msg, headers):
            result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, 
            msg, headers)
            result.status = code
            result.newurl = result.geturl()
            return result
    opener = urllib2.build_opener(RedirectHandler)
    opener.open('http://www.zhihu.cn')

    1.7 Proxy的设置

    在做爬虫开发中,必不可少地会用到代理。urllib2默认会使用环境变量http_proxy来设置HTTP Proxy。但是我们一般不采用这种方式,而是使用ProxyHandler在程序中动态设置代理,示例代码如下:

    
     

    import urllib2
    proxy = urllib2.ProxyHandler({'http''127.0.0.1:8087'})
    opener = urllib2.build_opener([proxy,])
    urllib2.install_opener(opener)
    response = urllib2.urlopen('http://www.zhihu.com/')
    print response.read()

    这里要注意的一个细节,使用urllib2.install_opener()会设置urllib2的全局opener,之后所有的HTTP访问都会使用这个代理。这样使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的Proxy设置,这种场景在爬虫中很常见。比较好的做法是不使用install_opener去更改全局的设置,而只是直接调用opener的open方法代替全局的urlopen方法,修改如下:

    
     

    import urllib2
    proxy = urllib2.ProxyHandler({'http''127.0.0.1:8087'})
    opener = urllib2.build_opener(proxy,)
    response = opener.open("http://www.zhihu.com/")
    print response.read()


    2. httplib/urllib实现

    httplib模块是一个底层基础模块,可以看到建立HTTP请求的每一步,但是实现的功能比较少,正常情况下比较少用到。在Python爬虫开发中基本上用不到,所以在此只是进行一下知识普及。下面介绍一下常用的对象和函数:


    • 创建HTTPConnection对象:

      class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])。

    • 发送请求:

      HTTPConnection.request(method, url[, body[, headers]])。

    • 获得响应:

      HTTPConnection.getresponse()。

    • 读取响应信息:

      HTTPResponse.read([amt])。

    • 获得指定头信息:

      HTTPResponse.getheader(name[, default])。

    • 获得响应头(header, value)元组的列表:

      HTTPResponse.getheaders()。

    • 获得底层socket文件描述符:

      HTTPResponse.fileno()。

    • 获得头内容:

      HTTPResponse.msg。

    • 获得头http版本:

      HTTPResponse.version。

    • 获得返回状态码:

      HTTPResponse.status。

    • 获得返回说明:

      HTTPResponse.reason。

    接下来演示一下GET请求和POST请求的发送,首先是GET请求的示例,如下所示:

    
     

    import httplib
    conn =None
    try:
        conn = httplib.HTTPConnection("www.zhihu.com")
        conn.request("GET""/")
        response = conn.getresponse()
        print response.status, response.reason
        print '-' * 40
        headers = response.getheaders()
        for h in headers:
            print h
        print '-' * 40
        print response.msg
    except Exception,e:
        print e
    finally:
        if conn:
            conn.close()

    POST请求的示例如下:

    
     

    import httplib, urllib
    conn = None
    try:
        params = urllib.urlencode({'name''qiye''age'22})
        headers = {"Content-type""application/x-www-form-urlencoded"
        , "Accept""text/plain"}
        conn = httplib.HTTPConnection("www.zhihu.com"80, timeout=3)
        conn.request("POST""/login", params, headers)
        response = conn.getresponse()
        print response.getheaders() # 获取头信息
        print response.status
        print response.read()
    except Exception, e:
        print e
        finally:
        if conn:
            conn.close()

    3. 更人性化的Requests

    Python中Requests实现HTTP请求的方式,是本人极力推荐的,也是在Python爬虫开发中最为常用的方式。Requests实现HTTP请求非常简单,操作更加人性化。

    Requests库是第三方模块,需要额外进行安装。Requests是一个开源库,源码位于:

    GitHub: https://github.com/kennethreitz/requests

    希望大家多多支持作者。

    使用Requests库需要先进行安装,一般有两种安装方式:

    • 使用pip进行安装,安装命令为:pip install requests,不过可能不是最新版。

    • 直接到GitHub上下载Requests的源代码,下载链接为:

      https://github.com/kennethreitz/requests/releases

      将源代码压缩包进行解压,然后进入解压后的文件夹,运行setup.py文件即可。

    如何验证Requests模块安装是否成功呢?在Python的shell中输入import requests,如果不报错,则是安装成功。如图3-5所示。

    640?wx_fmt=png

    ▲图3-5 验证Requests安装

    3.1 首先还是实现一个完整的请求与响应模型

    以GET请求为例,最简单的形式如下:

    
     

    import requests
    r = requests.get('http://www.baidu.com')
    print r.content

    大家可以看到比urllib2实现方式的代码量少。接下来演示一下POST请求,同样是非常简短,更加具有Python风格。示例如下:

    
     

    import requests
    postdata={'key':'value'}
    r = requests.post('http://www.xxxxxx.com/login',data=postdata)
    print r.content

    HTTP中的其他请求方式也可以用Requests来实现,示例如下:

    
     

    r = requests.put('http://www.xxxxxx.com/put', data = {'key':'value'})
    r = requests.delete('http://www.xxxxxx.com/delete')
    r = requests.head('http://www.xxxxxx.com/get')
    r = requests.options('http://www.xxxxxx.com/get')

    接着讲解一下稍微复杂的方式,大家肯定见过类似这样的URL:

    http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1

    就是在网址后面紧跟着“?”,“?”后面还有参数。那么这样的GET请求该如何发送呢?肯定有人会说,直接将完整的URL带入即可,不过Requests还提供了其他方式,示例如下:

    
     

    import requests
        payload = {'Keywords''blog:qiyeboy','pageindex':1}
    r = requests.get('http://zzk.cnblogs.com/s/blogpost', params=payload)
    print r.url

    通过打印结果,我们看到最终的URL变成了:

    http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1

    3.2 响应与编码

    还是从代码入手,示例如下:

    
     

    import requests
    r = requests.get('http://www.baidu.com')
    print 'content-->'+r.content
    print 'text-->'+r.text
    print 'encoding-->'+r.encoding
    r.encoding='utf-8'
    print 'new text-->'+r.text

    其中r.content返回的是字节形式,r.text返回的是文本形式,r.encoding返回的是根据HTTP头猜测的网页编码格式。

    输出结果中:“text-->”之后的内容在控制台看到的是乱码,“encoding-->”之后的内容是ISO-8859-1(实际上的编码格式是UTF-8),由于Requests猜测编码错误,导致解析文本出现了乱码。Requests提供了解决方案,可以自行设置编码格式,r.encoding='utf-8'设置成UTF-8之后,“new text-->”的内容就不会出现乱码。

    但是这种手动的方式略显笨拙,下面提供一种更加简便的方式:chardet,这是一个非常优秀的字符串/文件编码检测模块。安装方式如下:

    
     

    pip install chardet

    安装完成后,使用chardet.detect()返回字典,其中confidence是检测精确度,encoding是编码形式。示例如下:

    
     

    import requests
    r = requests.get('http://www.baidu.com')
    print chardet.detect(r.content)
    r.encoding = chardet.detect(r.content)['encoding']
    print r.text

    直接将chardet探测到的编码,赋给r.encoding实现解码,r.text输出就不会有乱码了。

    除了上面那种直接获取全部响应的方式,还有一种流模式,示例如下:

    
     

    import requests
    r = requests.get('http://www.baidu.com',stream=True)
    print r.raw.read(10)

    设置stream=True标志位,使响应以字节流方式进行读取,r.raw.read函数指定读取的字节数。

    3.3 请求头headers处理

    Requests对headers的处理和urllib2非常相似,在Requests的get函数中添加headers参数即可。示例如下:

    
     

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    r = requests.get('http://www.baidu.com',headers=headers)
    print r.content

    3.4 响应码code和响应头headers处理

    获取响应码是使用Requests中的status_code字段,获取响应头使用Requests中的headers字段。示例如下:

    
     

    import requests
    r = requests.get('http://www.baidu.com')
    if r.status_code == requests.codes.ok:
        print r.status_code# 响应码
        print r.headers# 响应头
        print r.headers.get('content-type')# 推荐使用这种获取方式,获取其中的某个字段
        print r.headers['content-type']# 不推荐使用这种获取方式
    else:
        r.raise_for_status()

    上述程序中,r.headers包含所有的响应头信息,可以通过get函数获取其中的某一个字段,也可以通过字典引用的方式获取字典值,但是不推荐,因为如果字段中没有这个字段,第二种方式会抛出异常,第一种方式会返回None。

    r.raise_for_status()是用来主动地产生一个异常,当响应码是4XX或5XX时,raise_for_status()函数会抛出异常,而响应码为200时,raise_for_status()函数返回None。

    3.5 Cookie处理

    如果响应中包含Cookie的值,可以如下方式获取Cookie字段的值,示例如下:

    
     

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    r = requests.get('http://www.baidu.com',headers=headers)
    # 遍历出所有的cookie字段的值
    for cookie in r.cookies.keys():
        print cookie+':'+r.cookies.get(cookie)

    如果想自定义Cookie值发送出去,可以使用以下方式,示例如下:

    
     

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    cookies = dict(name='qiye',age='10')
    r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
    print r.text

    还有一种更加高级,且能自动处理Cookie的方式,有时候我们不需要关心Cookie值是多少,只是希望每次访问的时候,程序自动把Cookie的值带上,像浏览器一样。Requests提供了一个session的概念,在连续访问网页,处理登录跳转时特别方便,不需要关注具体细节。使用方法示例如下:

    
     

    import Requests
    oginUrl = 'http://www.xxxxxxx.com/login'
    s = requests.Session()
    #首先访问登录界面,作为游客,服务器会先分配一个cookie
    r = s.get(loginUrl,allow_redirects=True)
    datas={'name':'qiye','passwd':'qiye'}
    #向登录链接发送post请求,验证成功,游客权限转为会员权限
    r = s.post(loginUrl, data=datas,allow_redirects= True)
    print r.text

    上面的这段程序,其实是正式做Python开发中遇到的问题,如果没有第一步访问登录的页面,而是直接向登录链接发送Post请求,系统会把你当做非法用户,因为访问登录界面时会分配一个Cookie,需要将这个Cookie在发送Post请求时带上,这种使用Session函数处理Cookie的方式之后会很常用。

    3.6 重定向与历史信息

    处理重定向只是需要设置一下allow_redirects字段即可,例如:

    r=requests.get('http://www.baidu.com',allow_redirects=True)

    将allow_redirects设置为True,则是允许重定向;设置为False,则是禁止重定向。如果是允许重定向,可以通过r.history字段查看历史信息,即访问成功之前的所有请求跳转信息。示例如下:

    
     

    import requests
    r = requests.get('http://github.com')
    print r.url
    print r.status_code
    print r.history

    打印结果如下:

    
     

    https://github.com/
    200
    (<Response [301]>,)

    上面的示例代码显示的效果是访问GitHub网址时,会将所有的HTTP请求全部重定向为HTTPS。

    3.7 超时设置

    超时选项是通过参数timeout来进行设置的,示例如下:

    
     

    requests.get('http://github.com', timeout=2)

    3.8 代理设置

    使用代理Proxy,你可以为任意请求方法通过设置proxies参数来配置单个请求:

    
     

    import requests
    proxies = {
        "http""http://0.10.1.10:3128",
        "https""http://10.10.1.10:1080",
    }
    requests.get("http://example.org", proxies=proxies)

    也可以通过环境变量HTTP_PROXY和HTTPS_PROXY?来配置代理,但是在爬虫开发中不常用。你的代理需要使用HTTP Basic Auth,可以使用http://user:password@host/语法:

    
     

    proxies = {
        "http""http://user:pass@10.10.1.10:3128/",
    }


    03

    小结


    本文主要讲解了网络爬虫的结构和应用,以及Python实现HTTP请求的几种方法。希望大家对本文中的网络爬虫工作流程和Requests实现HTTP请求的方式重点吸收消化。

    本文摘编自《Python爬虫开发与项目实战》,经出版方授权发布。

    关于作者:范传辉,资深网虫,Python开发者,参与开发了多项网络应用,在实际开发中积累了丰富的实战经验,并善于总结,贡献了多篇技术文章广受好评。研究兴趣是网络安全、爬虫技术、数据分析、驱动开发等技术。

    640?wx_fmt=jpeg

    Python爬虫开发与项目实战

    扫码购买

    640?wx_fmt=png


    本书特色:

    • 由浅入深,从Python和Web前端基础开始讲起,逐步加深难度,层层递进。

    • 内容详实,从静态网站到动态网站,从单机爬虫到分布式爬虫,既包含基础知识点,又讲解了关键问题和难点分析,方便读者完成进阶。

    • 实用性强,本书共有9个爬虫项目,以系统的实战项目为驱动,由浅及深地讲解爬虫开发中所需的知识和技能。

    • 难点详析,对js加密的分析、反爬虫措施的突破、去重方案的设计、分布式爬虫的开发进行了细致的讲解。

    扫码购买

    640?wx_fmt=png

    展开全文
  • 如何创建一个简单网页

    千次阅读 2017-10-02 10:34:51
    我们已经基本熟悉了HTML的格式,现在我们来尝试一下创建一个简单的网页。1.创建一个.html格式的文件选择一个文本编辑软件,我这里用的是Notepad++.在工具栏选择“language”,勾选html,这个时候软件就知道你在编辑...

    我们已经基本熟悉了HTML的格式,现在我们来尝试一下创建一个简单的网页。

    1.创建一个.html格式的文件

    选择一个文本编辑软件,我这里用的是Notepad++.在工具栏选择“language”,勾选html,这个时候软件就知道你在编辑html格式的文件了,你在输入元素的时候按“Tab”键它就会自动帮你补全,输入块元素,内敛元素的时候就会帮你在元素的开始和结束符自动匹配并标记。

    2.编辑html内容

    下面我们来举个例子:

    <html>
    <head>
        <title>Starbuzz Coffee</title>
        <style>
            body {
                background-color: #d2b48c;    <!--设置html背景颜色为土黄色-->
                margin-left: 20%;             <!--设置左外边距占网页宽度的20%-->
                margin-right: 20%;            <!--设置右外边距占网页宽度的20%-->
                border: 2px dotted black;     <!--设置边框为2px粗的黑虚线-->
                padding: 10px 10px 10px 10px; <!--设置内边距上下左右均为10px-->
                font-family: sans-serif;      <!--设置字体样式-->
            }   
        </style>
    </head>                                   <!--这一部分是为html创建样式-->
    <body>
        <h1>Starbuzz Coffee Beverages</h1>
    
        <h2>House Blend, $1.49</h2>
        <p>A smooth, mild blend of coffees from Mexico, Bolivia and Guatemala.</p>
    
        <h2>Mocha Caffe Latte, $2.35</h2>
        <p>Espresso, steamed milk and chocolate syrup.</p>
    
        <h2>Cappuccino, $1.89</h2>
        <p>A mixture of espresso, steamed milk and milk foam.</p>
    
        <h2>Chai Tea, $1.85</h2>
        <p>A spicy drink made with black tea, spices, milk and honey.</p>
    </body>
    </html>                                 <!--这一部分是创建网页主体内容-->

    我们前面提到的为网页添加样式,实际上就是为把网页看作一个盒子模型,然后对这个盒子的外边距,内边距,边框宽度样式,内容宽度,背景颜色等进行设置。具体参见下图
    盒模型

    3.将文件保存为HTML格式,然后双击打开它
    简单网页成品
    好了,一个简单的网页制作就完成了,你有没有发现这个文件是用你的默认浏览器打开的呢?你有没有发现这个浏览器的地址栏显示的是你的文件所在路径呢?其实,当你有了一个自己的域名(经过DNS解析后就是网页的ip地址)和网络主机(功能类似于给你提供了一个存放网页文件的文件夹)后,你看的网页地址就会类似下面,这里拿我的当前网页来举例吧:
    网站地址

    前面的http://write.blog.csdn.net指的是CSDN当前博客的根目录,后面的/mdeditor指的是我这个博客的内容将会被存放的文件夹为mdeditor。

    目前个人已在万网上注册了一个40元一年的域名www.317cpan.com,但是光有域名没有用,要想有一个可以存放网页文件的文件夹,我又购买了一个200多元一年的虚拟云主机,这样我就可以通过不断的编辑我的网页文件,然后把它存放到我的云主机文件夹里,来不定期对网页进行更新啦。
    有条件的同学可以买一个云服务器,这样就可以通过ssh来登录传文件了,相关的linux指令也可以得到很好的锻炼,服务器就好比是一台电脑,而云虚拟主机只是提供了一个文件夹。大家自己权衡吧。我是小白,入门为主的话建议买个虚拟主机就够了。

    展开全文
  • 怎么建立一个自己的博客

    万次阅读 2018-02-14 18:21:03
    怎么建立一个自己的博客 1. 写在开头 其实我自己写的文章也不多,只是看到有些东西会做一下记录,所以部署一个自己的博客来记录这些东西也就会方便很多。而Hexo框架的博客使用方便对电脑要求也不高,并且有很多...

    怎么建立一个自己的博客

    1. 写在开头

    其实我自己写的文章也不多,只是看到有些东西会做一下记录,所以部署一个自己的博客来记录这些东西也就会方便很多。而Hexo框架的博客使用方便对电脑要求也不高,并且有很多可以使用的主题,所以就用它把!

    先来看看效果先

    电脑/ipad版:

    手机版:


    来听首歌把

    border="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=27965161&auto=0&height=66">

    这个就是你看到这篇文章的博客的首页了哈哈,可能有些不美!不过我也觉得还ok啦!其实啦配置一个博客也不难,我所使用的就是由一位台湾的在校大学生开发完成的hexo博客框架。

    1.1 这里是一些知识拓展

    hexo官方文档:介绍了很多关于hexo的要求自己可以去看看。

    1.2 HEXO简介

    Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在github和Heroku上。作者是来自tommy351大神

    2.1 安装/部署

    安装Hexo相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:

    1. 安装的Git
    2. 安装的NodeJS
    3. 安装HEXO
    4. 部署项目
    5. 绑定个人域名
    6. 修改及配置主题
    7. 写文章部分

    2.2安装Git

    • Git的安装步骤:双击下载好的EXE文件,一路下一个就好啦
    • 安装好后,打开gitbash

    如果这样显示的话就成功了。

    2.3安装的node.js

    节点官网上下载最新的Windows安装包,推荐左边那个适用于大多数用户的直接安装即可。对于Windows用户来说,建议使用安装程序进行安装。安装时,请勾选添加到PATH选项。

    2.4 Hexo的安装与使用

    HEXO安装命令:新建一个用来储存博客的文件夹(比如说我这里在C:\ HEXO)

    ,然后在你想要安装的文件夹空白位置右键选择'Git Bash Here'

    1.输入

    npm install hexo -g  
    其中的意思是:-g表示全局安装, npm默认为当前项目安装
    

    2.现在打开CMD,在CMD中输入在C:\用户\磐英>后输入

    cd C:/

    〜其中的意思是:进入Ç盘根目录(这里你应该按照自己创建的文件夹选择不同的路径)〜

    3.然后再输入

    cd hexo

    这样就能进入我放在Ç盘的HEXO文件夹了,就像这样

    1. 输入

      hexo init
      npm install    #install before start blogging
      hexo generate       #自动根据当前目录下文件,生成静态网页
      hexo server         #运行本地服务

      你会看到你的文件夹下出现了这些文件(我装了主题文件可能比你的多不过没关系)

      浏览器输入的http://本地主机:4000就可以看到效果了

    到这里就配置完成了

    3.1添加博文

    在你安装hexo的文件夹空白位置右键选择'Git Bash Here'同2.4

    hexo new "你的文章名"

    这样你就会在博客目录下source/_posts\你的文章名.md自动生成一篇名叫'你的文章名'的一个md文件,使用md软件(这里安利一下一款极简的markdown编辑器)打开就可以使用Markdown语法书写了

    写完后点击保存你就可以看到文章显示出来了

    〜到这里博客就可以本地了〜

    3.2部署到互联网

    自己写的博客只能自己看总觉得缺少了些什么,因此申请一个域名然后把博客共享到互联网岂不美哉?

    在阿里云注册一个域名(注册过程就不演示了) - 进入控制台 - 选择域名 - 域名解析

    选择一型记录然后填入你电脑的IP,这样你就能通过域名来访问你的博客了!(这一步有问题可能选择使用阿里云域名解析上面那个新手引导)


    4.素质拓展

    4.1 Hexo的下一个主题安装

    当初选择HEXO作为我博客的框架是因为:默认状态下HEXO已经有了不俗的表现,简洁优美,富有观赏性,多超的主题可供选择

    官方教程在这

    1.在你的文件夹下空白位置右键选择'Git Bash Here' 同2.4

    $ git clone https://github.com/iissnan/hexo-theme-next themes/next

    这步的意思是:从接下来的Gihub仓库中最新电子杂志版本。

    1. 启用下一个主题

    修改需要C:/hexo/_config.yml配置项theme

    用记事本打开_config.yml(我这里使用了记事本)中找到主题这一项把景观改为下一个(注意冒号后面的空格不能省略)

    改为

    然后在GIT中代码输入侧同2.4

    hexo s

    访问http://localhost:4000就会发现主题成功应用了。

    参考:官方使用文档打造炫酷博客


    4.2 远程化你的博客

    在自己的电脑大可不必做这一步,我是因为博客部署在服务器上面需要远程维护便携性就显得尤为重要了。so,我选择部署了一个web应用来管理这个静态博客:通过 ·hexo-admin· 来管理 hexo 博客

    就是这总效果:

    当你不在电脑面前(我的是服务器)也可以轻松地写博客,岂不美哉?

    何况:大丈夫生于天地之间,当读圣贤之书,养浩然正气,仿天地之德以爱人,效圣贤之志以成业。

    说干就干!

    方法如下:

    ~未完待续~

    博客地址 http://dgut.top:4000/
    我的另一个博客地址 http://usg1024.xin/

    展开全文
  • VS建立网页

    千次阅读 2020-08-18 09:20:55
    如何建立网页,首先打开VS,然后找到左上角点击文件,选择新建点击项目弹出模态框,我需要的是Visual C# 在里面找到Web建立网页,选择第一个ASP.NET Web应用程序,下面的名称使用项目名称,当然自己可以随便写,只要...
  • 网页设计\网页制作常用软件大全

    千次阅读 多人点赞 2014-03-04 12:08:26
    、专业的网页设计、网页制作软件: 1、CorelDraw:通过CorelDRAW9的全方面的设计及网页功能融合到现有的设计方案中,制作矢量的插图、设计及图像,出色地设计公司标志、简报、彩页、手册、产品包装、标识、网页及...
  • 网页设计】关于一个静态展示类网站的建立

    千次阅读 热门讨论 2016-01-30 15:51:37
    简单的说就是用一个感觉的色彩,例如淡蓝,淡黄,淡绿;或者土黄,土灰,土蓝。也就是在同一色系里面采用不同的颜色使网页增加色彩,而又不花,色调统一。这种配色方法在网站设计种最为常用。 4
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...
  • 首先申请个域名,用阿里服务器托管(使用免费二级域名也可以,较长的...然后修改/www下的index ,自己在/www创建一个网页,从素材网站找也可以 然后修改index的自动跳转代码, 这样基本就完成了 https 也就是443端口
  • 用Django创建一个简单网页

    千次阅读 2018-03-30 16:29:52
    ---首先新建一个新项目:---在这里命名工程的名字---在右侧的齿轮处选择create创建虚拟环境,命名后勾选inherit ...-----开始做一个自己的简单网页在templates下创建一个html文件,名字随便取,在这里取为index。-...
  • 其实最近一直在搭建自己的博客和自己的图床,遇见了一些各种各样的问题,所以在这里总结一下如何利用宝塔面板来建立一个网站。 1.网站在服务器中的形式 其实网站虽然是网站我们能访问到,实际上我们访问到的都是...
  • 建立一个网站的具体过程

    万次阅读 多人点赞 2017-04-12 11:04:38
    )、建设步骤 1、申请域名(域名备案); 2、申请空间 ; 3、定位网站 ; 4、分析网站功能和需求(网站策划); 5、网站风格设计 ; 6、网站代码制作; 7、测试网站; 8、发布到外网。   、...
  • 本人去年转行软件行业,在深圳一家外包公司工作,学的东西跟自己想做的JAVA WEB开发完全不同,只能说是了解了下软件行业的一点门路吧,为了坚持自己的路,打算自己开发一个简单的网站,并记录下自己开发过程,很多...
  • 1、你的宽带是不是用猫上的?(也就是说,你的ip是固定ip还是自动生成的虚拟ip?) 如果是固定ip,不需要用花生壳(花生壳是一套完全免费的动态...如果用花生壳,还是比较直接的,你下载个自己摸索摸索就会了。 如
  • 1.首先你要编写好网页,最简单的就是用div+css写一个静态的html文件,如:index.html。 第二:购买服务器和域名,用于存放你的网页 1.购买一台服务器,建议去阿里云的centos服务器。 服务器:为什么要服务器呢?...
  • Django----做一个简单网页的教程(适合初学者)

    万次阅读 多人点赞 2018-08-23 15:10:15
    这篇文字适合刚学习Django的同学,如果比较熟的就不用看了。 以下都是讲在windows上的部署情况; ...学习django框架其实就是学习它的文件目录,...到这里就完成了一个简单的网页制作的过程,有问题可以向我提问。
  • 虚拟机中JSP网页建立与访问

    千次阅读 2018-08-25 18:47:32
    1. 在虚拟机中建立一个最简单的JSP网页。 2. 通过Tomcat服务器发布刚建立的JSP网页。 3. 通过虚拟机的宿主机浏览器访问虚拟机上所发布的JSP网页。 前言 在前面,我们学习探究了如何安装VMware...
  • 网页|如何制作一个HTML网页

    千次阅读 2020-03-02 00:00:00
    HTML(Hypertext MarkupLanguage)也叫作超文本标记语言,是一种用来结构化 Web 网页及其内容的标记语言,标准通用标记语言下的一个应用,可以使用 HTML 来建立自己的 WEB 站点。HTML(标准通用语言下的一个应用)...
  • 怎么使用云服务器创建一个网页

    万次阅读 多人点赞 2018-03-11 02:21:33
    昨天无意之中看到腾讯的一个云服务器的活动,看着配置还不错1核CPU,2G内存 买12个月送4个月才120挺划算的,主要是朋友上次帮人家做业务买的,配置只有这个一半还要五百多,所以觉得这个挺实惠的 钱付起来是挺快的...
  • 一个网页打开的全过程

    万次阅读 多人点赞 2017-12-28 20:41:25
     从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程。下面我将依靠自己的经验,总结一下整个过程。如有错漏,欢迎指正。  阅读...
  • 是不是曾想过创建一个属于自己的网站?拥有一个独一无二的域名,让别人可以通过外网使用这个域名访问自己的网站?小白教程来了,大佬请略过轻喷!大家互相学习一下,共同进步! 目录 1 基本概念 2 网页文件的简单...
  • HTML+CSS第一课:初识HTML-3个步骤创建自己的第一个html网页 HTML+CSS第二课:格式标签、图像标签、链接标签的使用 HTML+CSS第五课:使用Dreamweaver工具制作网页 知识点: HTML文档基本结构、图像标签<img...
  • 在github上建立自己的网站

    千次阅读 2018-01-28 10:37:14
    google一下了解到Github有一个Github pages的功能可以搭建博客或者托管网页,而且免费耶,搜了下教程,猛地一看感觉步骤也不是很麻烦,所以就用这个了!   开始教程之前的准备工作: 1、需要你自己写的...
  • 网页制作:制作一个官网

    千次阅读 多人点赞 2020-11-30 11:16:48
    随后就出现了一个半成品的网页。 之后的编辑和C#的WPF,java的FX都差不多,可以有界面下的拖拽,也可以有文本的编辑方式。 技巧 跳到对应代码(设计) 点击“设计”可以调到对应的“代码”。反过来,也可以。 修改...
  • 【HTML5】->初识HTML->HTML简单介绍&HTML5基本元素讲解

    千次阅读 多人点赞 2020-02-19 19:53:16
    HTML边缘探索Ⅰ HTML简介Ⅱ HTML到HTML5----HTML发展历史Ⅲ HTML5简介Ⅳ HTML5环境Ⅴ HTML5基本元素介绍Ⅵ 写一个最简单的HTML程序 Ⅰ HTML简介 超文本标记语言(Hyper Text Markup Language),缩写为HTML,标准...
  • 如何搭建一个属于自己的博客网站?(小白教程)

    千次阅读 多人点赞 2020-05-09 22:38:57
    很多人包括我在内,都希望能有一个自己的博客网站,但大部分人都不知道从何处着手,但实际上建立一个博客网站并没有想象的那么复杂,即便我们不是很懂技术,也可以做一个属于自己的网站。以下是我建立个人网站的一些...
  • 使用eclipse建立一个web项目(java)

    万次阅读 2016-09-10 19:09:38
    环境:win10 64位、eclipse(已安装tomcat插件)、...建立java-tomcat project 在eclipse里依次选择File -> New -> Other -> java -> Tomcat Project 填写项目(project)的名称,然后点击Finish就可以了
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠章的内容就完全掌握C#语言是不可能的,...
  • 访问一个网页的全过程(超详细版)

    千次阅读 多人点赞 2020-03-17 14:15:39
    第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才...
  • 基于SSM的校园二手交易平台的设计与实现

    万次阅读 多人点赞 2018-05-06 14:24:44
    PS: Java版本:1.7 数据库:MySQL 框架:Spring + Spring MVC + MyBatis 服务器:Tomcat 前端解析框架:Thymeleaf 开发工具:Idea 2017 版本管理工具:Maven 版本控制工具:GitHub ...、设计概...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 217,152
精华内容 86,860
关键字:

如何自己建立一个网页