zoukankan      html  css  js  c++  java
  • 用python爬虫抓站的一些技巧总结

    1. [代码]最基本的抓站    

    1
    2
    import urllib2
    content = urllib2.urlopen('http://XXXX').read()

    2. [代码]使用代理服务器    

    1
    2
    3
    4
    5
    import urllib2
    proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})
    opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    content = urllib2.urlopen('http://XXXX').read()

    3. [代码]需要登录的情况:    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #1 cookie的处理
     
    import urllib2, cookielib
    cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
    opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    content = urllib2.urlopen('http://XXXX').read()
     
    #2 用代理和cookie
     
    opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)
     
    #3 表单的处理
     
    import urllib
    postdata=urllib.urlencode({
        'username':'XXXXX',
        'password':'XXXXX',
        'continueURI':'http://www.verycd.com/',
        'fk':fk,
        'login_submit':'登录'
    })
     
    req = urllib2.Request(
        url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
        data = postdata
    )
    result = urllib2.urlopen(req).read()
     
    #4 伪装成浏览器访问
     
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
    }
    req = urllib2.Request(
        url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
        data = postdata,
        headers = headers
    )
     
    #5 反”反盗链”
     
    headers = {
        'Referer':'http://www.cnbeta.com/articles'
    }

    4. [代码]多线程并发抓取    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    from threading import Thread
    from Queue import Queue
    from time import sleep
    #q是任务队列
    #NUM是并发线程总数
    #JOBS是有多少任务
    q = Queue()
    NUM = 2
    JOBS = 10
    #具体的处理函数,负责处理单个任务
    def do_somthing_using(arguments):
        print arguments
    #这个是工作进程,负责不断从队列取数据并处理
    def working():
        while True:
            arguments = q.get()
            do_somthing_using(arguments)
            sleep(1)
            q.task_done()
    #fork NUM个线程等待队列
    for i in range(NUM):
        t = Thread(target=working)
        t.setDaemon(True)
        t.start()
    #把JOBS排入队列
    for i in range(JOBS):
        q.put(i)
    #等待所有JOBS完成
    q.join()
    一只混迹在规划圈的giser,喜欢数据分析和模型
  • 相关阅读:
    Git安装配置
    Openstack 错误日志查看方法
    keystone v3.0与2.0的区别
    Python远程调试Openstack
    openstack遇到的错误
    特别翔实的adaboost分类算法讲解 转的
    h5 html5 模拟时钟 页面
    js 面向对象 jquery 全局变量 封装
    HTML5 h5 微信 浮层 提示 点击右上角,从浏览器打开 pop.png
    jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧
  • 原文地址:https://www.cnblogs.com/giserliu/p/4016331.html
Copyright © 2011-2022 走看看