精华内容
下载资源
问答
  • 简单的flask入门,自己写网页

    千次阅读 2019-01-15 19:11:07
    简单的flask入门 简单的flask入门 我这里使用的是ubuntu系统,不是windows系统,解释器是python3.6,软件是pycharm ...首先要创建虚拟环境, ...可以拷贝一个网页的源代码,放在python中,运行即可得到网页

    简单的flask入门

    简单的flask入门

    我这里使用的是ubuntu系统,不是windows系统,解释器是python3.6,软件是pycharm

    1. 首先要创建虚拟环境, 因为可以创建独立的python环境,可以避免同一个框架的 多版本冲突

    2. flask基本命令
      创建虚拟环境 mkvirtualenv -p python3 虚拟环境名字
      退出虚拟环境 deactivate
      进入虚拟环境 workon 虚拟环境名字
      查看所有虚拟环境 workon 双击tab
      安装第三方包 pip install flask==0.10.1

    3. 我写的入门的flask程序
      在这里插入图片描述

    4. 可以拷贝一个网页的源代码,放在python中,运行即可得到网页在这里插入图片描述

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

    万次阅读 多人点赞 2019-05-14 14:34:48
    但是有时候会遇到这种情况,我们不想urllib2自动处理,我们想自己添加Cookie的内容,可以通过设置请求头中的Cookie域来做: import  urllib2 opener = urllib2.build_opener() opener.addheaders.append( (  ...

    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

    展开全文
  • JavaWeb项目通过TomCat别人访问自己网页 ...本博客 的 是如何 通过网址访问项目 ,别人在线访问自己的项目 这是网址:https://cloud.tencent.com/act/campus?from=10082 注册成功后需要修...

    JavaWeb项目通过TomCat让别人访问自己的网页

    本博客用腾讯云服务器举例,第一步可到腾讯云租赁服务器可以租学生的10元一个月,和购买一个域名如果要给网页备案需要买至少3个月的服务器。

    本博客 写的 是如何 通过网址访问项目 ,让别人在线访问自己的项目 

    这是网址:https://cloud.tencent.com/act/campus?from=10082

    注册成功后需要修改服务器的系统方便远程连接图像化

    我在这里安装的是win ser 2016它就至少个win系统和win操作一样

    等待安装后 win+r 打开运行 输入 mstsc 

    在点击

    连接

    输入你重新安装系统时的密码

    如果忘记账号密码可到服务器--》更多-》修改密码

    输入完后连接--》是

    连接成功后只有一个回收站

    这里可以最大化最小化和关闭(你关闭后服务器是不会关闭的只是你断开了连接)

    你可以从你的电脑文件复制到服务器,接下来就是安装Java运行环境和Tomcat环境了在这里就不介绍了,也可参考我其他博客

    注意样复制到c盘下可在开始菜单找到我的电脑

    安装sql也可以用于交换数据

    接下来就是配置tomcat可以通过网址访问你的项目

    第一步修改你的端口号把8080改成80

    第二部添加你自己的域名

    appBase是项目的入口文件夹

    <Host name="你自己的域名"  appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
            <Context docBase="项目的路径如果是war包就项目最后跟.war" 
                     path="/" reloadable="true"/>
    
    </Host>
    
    

    项目里面必须有index因为tomcat访问的时候第一个只会访问index文件如果没有回找不到  这里是我的项目

    这你的index可以是你的首页 也可以 通过js代码 调到你 WEB-INF下的指定jsp

    这是我的

    这是js

     

    <script language="javascript"> 
    	location.replace("/Myresume/index") 
    
    </script>

    万事具备只欠东风,那就是网页解析

    如果不解析怎么可以访问呢?

    静静等来十分钟后 打开服务器的 tomcat 

     

    在你的电脑上访问你自己的网站就OK啦,前几天是可以随意访问但是几天后,必须备案才可以访问,备案可以查看腾讯云 的备案系统哦,如果想从百度通过关键字查询里的网站是要到百度提交网址的。

    展开全文
  • 怎样将自己写网页放在服务器详解

    万次阅读 多人点赞 2018-06-05 16:18:54
    没事,我也不会,我是看完我的这篇文章才会的。 废话不多说,我不知道你目前进展到哪一步,我只是来讲讲我怎么将我的朴(chou)素(lou)的html公布于世。 step1: 注册账号并连接到服务器(我用腾讯云讲述...

        刚刚学会html怎么做,想要放到云服务上让大家看却不知从何下手?

        没事,我也不会,我是看完我写的这篇文章才会的。 

         废话不多说,我不知道你目前进展到哪一步,我只是来讲讲我怎么将我的朴(chou)素(lou)的html公布于世。

       

         step1: 注册账号并连接到服务器(我用腾讯云讲述)

             腾讯云新人注册会有一个免费使用的时间,我也是看中了免费才来试试,首先你要在腾讯云的官网上注册账号并领取你的免费腾讯云。之后登录要是找不到地址(就像我这样儿的)可以参考我这个(https://cloud.tencent.com/),右上角点登录。进去以后找到云主机这栏,再点一下这个登录按钮,它会教你怎么连接到你的云主机。    

            点开登录的界面如下,我遮住的那部分是你的云主机的地址,你之后将html放上去以后,还是要靠这个地址来找的!!要牢记!

            如果你是个足够幸运的小朋友,那你可能现在已经连接到了你的云主机了,但是你可能是个不幸的孩纸,遇到了各种各样的麻烦。我把我遇到的一个麻烦提一下,如果你们还遇到其他麻烦只好继续百度了。

            我遇到的麻烦:连接的时候弹出错误信息:

          这可能是由于credssp加密oracle修正....

           巴拉巴拉的。。建议参考这篇文章,我按照上面说的解决了这个问题  ,网址如下:     

          (https://blog.csdn.net/not_believe/article/details/80458811)

     

       step2: 连接好云主机并放一个html上去

            好了,现在大家应该都进入都我们的云主机了。那我们该放哪儿?我们该怎么看我们的html?作为小白,我查了一下午百度也没搞清楚是咋地回事。后来终于一个巧合弄成了,总结一下大体分为这么几步:

            一、下载一个iis(Internet Information Services

            怎么下?这是个问题,给你提供一个步骤,方便你找!

        (https://cloud.tencent.com/document/product/213/2755?!preview=true&lang=zh)

           

            二、放html

            下好iis以后在c盘找到这个目录(C:\inetpub\wwwroot),把你的html直接放在这个文件夹,比如我放了一个hello.html

            这时候你怎么找到你这个hello.html呢?

            记笔记!

            http://云主机ip地址//hello.html

            红色部分是什么?就是我刚刚在上面提到的你的云主机的地址!(就下图我遮住的地方,你输入你自己的地址就好)

            当然,如果你觉着只有一个ip地址有点丑,你可以整个域名出来,就是给它起个名字啦,不过你懂得,起名咋也得收点money。

     

        

     PS:如果你的语言是英文,而你恰好英语不是很好的话,建议像我这样改成中文:参考方法如下

            (http://bbs.qcloud.com/forum.php?mod=viewthread&action=printable&tid=8413)

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 一直想着整理出网页抓取的具体实现功能代码,方便大家指正,也方便自己学习...当然这个并不是针对所有网页自己写的功能有限,只能针对某一特定结构的网页进行数据采集,如果有更好的方法,请大家不吝指教,在此谢过!
  • VS Code写网页方法

    千次阅读 2020-03-05 17:36:16
    如何VS Code直接在浏览器中运行看到代码效果? 同样的地方搜索插件open in browser,直接安装 插件右边有说明栏: alt+b直接在默认浏览器中运行 shift+alt+b可以自己选择一个浏览器运行 之后...
  • 5、用python一个自己网页

    千次阅读 2019-05-04 23:05:00
    3、在cmd按顺序下如下代码: 4、然后在电脑网页输入如下链接:http://localhost:8081/cgi-bin/111.py 结果如下:   哈哈完成啦,耶 转载于:https://www.cnblogs.com/LuDuo/p/10810222.html
  • 如何将自己做的网页发布到网站别人可以看到

    万次阅读 多人点赞 2018-09-18 20:32:13
    自从在大学学了H5之后,一直都在想,怎么将自己写的HTML网页发布到网上像百度一样任意用户可以访问呢?于是我便做了一些尝试,并有了如下收获: 首先,把网站上传到网站别人访问需要以下东西: 1:域名 2:...
  • 所以,就想模仿一下人家内嵌到网页上的Markdown编辑器,从而让自己的博客系统更加美观一点。准备需要什么 Markdown“解释器”:便于处理文本输入以及实时预览 Bootstrap模板 :建议的H5界面看起来并不好看,所以使用...
  • 如何外网访问自己写的网站

    千次阅读 2019-04-26 17:02:30
    好的工程应用 ; natapp,获取注册点这里:Here; 实现步骤 注册并实名认证; 购买隧道,免费隧道; 见图: 复制authtoken; 本地能运行你的工程应用,具体见上一篇; 打开cmd,将命令行切换到natapp的文件夹...
  • Linux下简单动态网页

    千次阅读 2018-07-03 22:42:35
    要求:在LAMP、LNMP等环境下,任意挑选下列2种或以上动态网页语言,出一个页面,读取MYSQL实验中的数据表数据。(PHP,JSP,Perl,Python,Ruby,Go,ASP.NET)LAMP是指:linux、Apache、mysql,phpLNMP是指:...
  • 如何把自己写网页挂在Github上面(完整教程)

    万次阅读 多人点赞 2018-06-09 21:42:09
    打开克隆仓库,删除除了.git以外的其他文件,上传我们自己的文件。我们先完成删除环节,删除完克隆仓库的目标文件之后,在此路径下打开github命令窗口,执行以下命令: $ git add * //把本地仓库的文件上传到缓存...
  • jSignature网页手写签名

    千次阅读 2018-07-02 17:45:38
     注意:1、CSS样式自己调,这里的很简陋。  2、单击下载,并不是下载图片,而是保存到后台。 二、前端 &amp;amp;amp;amp;amp;lt;!DOCTYPE html&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;...
  • 自己网页支持Markdown编辑器

    千次阅读 热门讨论 2018-06-12 19:14:39
    最后就是页面了,我们采用官方github上面的例子 EditorMD ### Hello Editor.md ! OK,现在就可以在页面中使用Markdown了,我觉得这个这个编辑器比CSDN的Markdown编辑器功能要...
  • 分享自己的HTML页面 前言:作为刚接触前端的学员来说我们没有什么想法;但是当我们学习前端一段时间以后,我们能够编写出美丽的页面,那么问题来了;...
  • 关于google浏览器打不开网页问题之容易被忽略的点

    万次阅读 多人点赞 2019-04-24 23:15:11
    网页,原因网上有好多种,包括什么关闭防火墙、取消高级设置LAN单选框等,我也都试了,搞到最后要崩溃了,后来无意中,我输入一个http://baidu.com然后enter管用了,能打开页面了,欣喜之余发现自己好蠢,明明是...
  • 教你一个简单的网页(html网页开发入门)

    万次阅读 多人点赞 2017-10-16 15:02:49
    网页的组成 HTML  网页的具体内容和结构 CSS  网页的样式(美化网页最重要的一块) JavaScript  网页的交互效果,比如对用户鼠标事件作出响应 HTML 什么是HTML HTML的全称是...
  • 目前测试过后 Chrome 360都可以打开网页 但发现Chrome是很快就能打开 360打开时感觉像卡住一样 不显示页面 这时如果我用360再开一个网页连接 之前的网页就显示页面了 不清楚原因 ![图片说明]...
  • 很多才开始做前端的人,都希望自己所做的作品可以其他人都可以搜索到,或者是想自己建设一个自己的个人网站。 就像我们搜索www.baidu.com一样,首先我们要先有一个域名,域名是需要购买的,可以在阿里云,百度云...
  • 第一:网页: 1.首先你要编写好网页,最简单的就是用div+css一个静态的html文件,如:index.html。 第二:购买服务器和域名,用于存放你的网页 1.购买一台服务器,建议去阿里云的centos服务器。 服务器:为什么...
  • 用HTML+CSS做一个漂亮简单的个人网页

    万次阅读 多人点赞 2019-12-20 17:14:46
    1.刚好帮我妹了一个作业做一个个人网页设计,简单的三个小页面,就从网上随便找了图片自己随便设计了下东拼西凑哈哈哈!!!可能有点low但是对她来说或者需要做简单的个人网站应该就够了吧! 图片是从站酷上面找...
  •  做成 web服务 器需要满足:域名或者 公网ip ,电脑安装配置 web服务 ,开启 80端口 允许访问,网站程序。...网站程序,自己会开发了可以自己做,不会了到网上下载一些开源程序就可以了。
  • 静态网页入门讲解,制作属于你自己网页(一)

    千次阅读 多人点赞 2020-01-22 22:22:38
    在开始 这个系列教程主要针对完全没有接触过网页制作的萌新小伙伴开设的,如果你有一定的网页知识积累,可以果断关闭! 网页前端设计中牵涉的内容太多了,基础教程却比较缺乏,所以博主希望能够通过这样一个系列,...
  • 源文件中生成了helloworld.war,可根据自己的需求改为合适的名字 2. 连接服务器 下载WinScp软件,打开 再打开自己的服务器,以阿里云举例: 3. 上传war包 把自己的war包,直接拉进右侧webapps的文件内 ...
  • 如何通过互联网访问自己网页

    千次阅读 2018-08-22 11:34:56
    5. 通过安全验证后,进入此页面,点击编辑代码,打开index.html,在里面输入自己写的页面(里面的本地地址需替换成网络地址)保存即可 6.复制控制台->云应用SAE 中的地址即可访问自己的页面
  • 如何在手机上访问自己做的网页

    万次阅读 2017-12-27 19:04:23
    前提:手机和电脑连接的是同一个路由器的网络。 1.搭建服务器,用Apache 2.把HTML文件放到服务器里面,打开浏览器能访问到服务器(localhost)里的HTML。 3. 查看本机的IP地址进入“网络和共享中心”(在...
  • 用localhost打开自己写网页,发现在编辑器修改的CSS样式刷新网页没用改变,确定不是CSS的问题,因为用直接双击打开网页的方式刷新CSS样式会改变。请问怎样用localhost方式打开的网页也可以刷新查看更改的内容
  • 我们为什么不用c++写网页

    千次阅读 2017-12-21 00:00:00
    要回答这个问题首先要明确题主对于写网页的定义。一个网页往往包含前端、后端两部分。前端负责页面的呈现,后端负责数据的处理,可以大概的理解成前端是人的衣服,而后端是人的五脏六腑。1前端前端的话主要是采用...
  • 如何发布自己的静态网页

    万次阅读 多人点赞 2019-04-17 15:24:17
    相信大家做完一些网页都想把自己网页发布出去给别人欣赏或使用,没有服务器又如何把网页发布出去呢?如果发布的仅是一个静态网页,还是很简单的。 使用对象存储云服务 对象存储(Cloud Object Storage,COS)是一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 426,183
精华内容 170,473
关键字:

怎么让自己写的网页