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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容