py爬虫基础【待续】

前言

从二三月开始自学Python开始,到后来被傻叉项目折腾了半年多的时间,一直停滞了这么久,现在重新整理一些爬虫的资料,比较散碎,单纯的是从开发马上上手的角度记录的,这些基础知识绝大多数是通过学习崔庆才老师的精品博客进行的摘要,原版还是要看崔老师的博客,再次感谢崔老师无私奉献的资料👏👏👏

urllib2【171107】

基本使用

  • 导包
    import urllib2
  • openUrl 看下定义
    • 唯一必填的是url
    • data 用于传参数
    • timeout超时时间
    • 返回值是 响应实体 response
    • 通过 response.read 获取响应体信息
def urlopen(url,
            data=None,
            timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            cafile=None,
            capath=None,
            cadefault=False,
            context=None):
  • 代码
def open_url():
    url = ""file:///Users/user/Documents/myGit/react-demos/demo01/index.html""
    response = urllib2.urlopen(url)
    print response.read()
  • 执行结果
    我的链接指向的是本地的一个HTML
    执行结果

带参数访问 GET & POST 访问

  • 前文所叙,将参数直接或者间接放在data 中,data为字典类型

  • GET 访问

    • 参数需要格式化一下,需要库`import urllib
    • get 访问其实就是把处理后参数拼接成一个url字符串
    • 例子
# GET 获取
def open_with_get():
    url0 = "http://client.hs.vread.com/operation/getQuestionList.json?"

    # 参数,字典类型
    params = {"page": 1, "page_size": 10}

    # 参数格式化
    data = urllib.urlencode(params)
    url = url0 + data
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    print response.read()
  • POST 访问
    • 和 get 不同的是,参数不能直接拼接在链接中,要写在字典中,
    • 手头没有合适的post 例子,将上面get的例子改为post ,不能执行,只是看一下格式
    • 例子
# Post 获取
def open_with_post():
    url = "http://client.hs.vread.com/operation/getQuestionList.json"

    # 参数,字典类型
    params = {"page": 1, "page_size": 10}

    # 参数格式化
    data = urllib.urlencode(params)
    
    request = urllib2.Request(url, data)
    
    response = urllib2.urlopen(request)
    
    print response.read() 

urllib2 的高级用法

HTTP 请求头参数

  • User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
  • Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
    • application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
    • application/json : 在 JSON RPC 调用时使用
    • application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
      在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务

在某些爬虫操作中,需要对请求头中个别值进行设定,具体的操作是

  • header 用一个字典进行接收,
  • 需要进行拼接的字段作为key,值用字符串
  • 拼接好的header 作为参数,再构建Request的时候传入
  • 示例代码
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read() 

获取cookie

opener

  • 定义: urllib2.OpenerDirector的实例
  • 当通过url访问资源的时候,就是通过opener
  • 前面 urllib2.urlopen 就是使用默认的opener
    • 它是一个特殊的opener,
    • 可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

获取cookie

  • 导包 import cookielib
  • 通过cookielib.CookieJar()创建cookie实例,用于存放cookie
    • 如果此cookie是可以由文件进行读取和存储到文件的,则使用cookielib.MozillaCookieJar(文件路径)
    • 存储的时候需要传参,参数为路径
  • 通过 urllib2.HTTPCookieProcessor(cookie实例) 创建 cookie处理器,参数为cookie实例
  • 通过urllib2.build_opener(cookie处理器)创建opener,参数为cookie处理器
  • 例子
# 获取cookie
def get_cookie():

    # 声明一个cookieJar来存放cookie
    cookie = cookielib.CookieJar()

    # 创建一个cookie处理器
    handler = urllib2.HTTPCookieProcessor(cookie)

    # 通过处理器来创建opener
    opener = urllib2.build_opener(handler)

    response = opener.open("https://www.zhihu.com")

    for item in cookie:
        print 'Name = ' + item.name
        print 'Value = ' + item.value

存储 读取cookie

  • 调用cookie实例的save方法存储
    • 参数1:gnore_discard的意思是即使cookies将被丢弃也将它保存下来
    • 参数2: ignore_expires的意思是如果在该文件中cookies已经存在
  • 调用cookie实例的load 方法读取
    • 参数0:cookie文件的全路径
    • 参数1:gnore_discard的意思是即使cookies将被丢弃也将它保存下来
    • 参数2: ignore_expires的意思是如果在该文件中cookies
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容