python学习21--爬虫相关

网络爬虫1--网络的访问
  网络模块urllib;
    包含四个模块:request,error,
    解码:str=htmlstr.decode("utf-8");
    response(对象)=urllib.request.urlopen(url[,....])
      或者是:req()对象=urllib.request.Request(urlstring);
          response(对象)=urllib.request.urlopen(req).
      即:urlopen的url参数可以为一个字符串或者一个request独像。当为字符串时系统帮助做下面的两句话。
    str(字符串,二进制型)=response.read();
    对于response:
      .geurl(),返回访问的连接地址。
      .info().返回HTTPMESSAGE.
      .getcode().
网络爬虫2--图片下载
  需要明确的是,图片等多媒体文件也是由二进制组成。
  图片下载,需要先open一个文件,然后写入;
  例如:with open('cat.jpg','wb') as f:
      f.write(response);

网络爬虫3--在线翻译
  1.url中data参数。
  data=urllib.parse.urlencode(data).encode('utf-8').此utf-8的确定根据具体要访问的网站的源码编码格式进行设置
    python默认的编码格式为unicode
  response=urllib.request.urlopen(url.data)
  html=reponse.read().decode('utf-8').解码
  //json数据格式解析
  jsondict(字典格式)=json.loads(html)
  根据jsondict具体形式获得想要的数据。对于字典中套字典情况,可以用多重[][][]获取。
网络爬虫4--隐藏
  1.模拟正常浏览器访问
    urlopen中的url实际上是一个Request对象。所以对于自定义head,的两种方式:
    其中需注意的是;heads是一个字典。
    方法一:
      head={}
      head['User-Agent']="string".string复制浏览器显示的。
      req=urllib.request.Request(url,data,head)
    方法二:
      req=urllib.request.Request(url,data)
      req.add_head('User-Agent','string').
  2.提交频率
    方法一:延迟提交时间
      import time
      time.sleep(5).五秒钟
    方法二:使用代理
      1.创建一个代理字典:
        字典格式:{‘类型’:‘代理ip:端口号’}
        proxy=urllib.request.ProxyHandler({})
      2.定制,创建一个opener
        opener=urllib.request.build_opener(proxy)
      3.安装opener
        urllib.request.install_open(opener)
      4.调用opener
        opener.open(url)
    3.隐藏总结:
      opener.addheaders=[{'User-Agent','str'}]
      其余同上
4.对于单个线程来说,每次只能访问一个连接,所以直接将ip:port做成一个列表,然后随机取出。
    random.choice(列表)

posted @ 2017-01-24 17:55  YJ-20  阅读(180)  评论(0编辑  收藏  举报