zoukankan      html  css  js  c++  java
  • 爬虫问题

    1.urlopen参数设置

    urlopen(url, data, timeout)


    import urllib

    import urllib2

     

    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()



    2.代理设置

    (1)import urllib2

    enable_proxy = True

    proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})

    null_proxy_handler = urllib2.ProxyHandler({})

    if enable_proxy:

    opener = urllib2.build_opener(proxy_handler)

    else:

    opener = urllib2.build_opener(null_proxy_handler)

    urllib2.install_opener(opener)


    (2) import urllib2

    import time

    import re

    f = open('logging01', 'w')

    proxies = {'http':'http://117.89.152.52:8090'}

    for i in range(50):

    num = i+1

    f.write('page'+str(num)+' ')

    while True:

    urllib2.ProxyHandler(proxies)

    url = 'http://club.jd.com/productpage/p-2121097-s-0-t-3-p-%u.html'%i

    response = urllib2.urlopen(url)

    content = response.read().decode('GB2312','ignore').encode('utf-8')

    title = re.findall('"content":"(.*?)","creationTime":"',content)

    if content=='':

    time.sleep(10)

    if not str(content)=='':

    # print title

    for j in title:

    if 'div' in j:

    continue

    print j

    f.write(str(j)+' ')

    break


    f.close()

    3)假如要设置多个代理,做法

    4)这里要注意的一个细节,使用 urllib2.install_opener() 会设置 urllib2 的全局 opener 。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等。比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener open 方法代替全局的 urlopen 方法。

    (5)pythonopenerbuild_openenr , urlopen opener open 方法的区别

    4.使用 HTTP PUT DELETE 方法


    http协议有六种请求方法,get,head,put,delete,post,options,我们有时候需要用到PUT方式或者DELETE方式请求。


    PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUTPOST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。

    DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazonS3云服务里面就用的这个方法来删除资源。

    如果要使用 HTTP PUT DELETE ,只能使用比较低层的 httplib 。虽然如此,我们还是能通过下面的方式,使 urllib2 能够发出 PUT DELETE 的请求,不过用的次数的确是少,在这里提一下。


    import urllib2

    request = urllib2.Request(uri, data=data)

    request.get_method = lambda: 'PUT' # or 'DELETE'

    response = urllib2.urlopen(request)


    5.爬虫在什么时候会用到异常处理方面的知识呢?

    1.urlopen参数设置

    urlopen(url, data, timeout)


    import urllib

    import urllib2

  • 相关阅读:
    国内CAD二次开发关注度比较
    用Java做UG NX 二次开发
    【纪念帖】开通我的第二技术博客
    UG NXOpen for C++ (NX6) CHM帮助文件
    UG CAM 二次开发 UF_SETUP_generate_program详解
    解决QWidget: Must construct a QApplication before a QPaintDevice
    建模语言: Not UML but Generative Modeling Language
    从32bit迁移到64bit
    从32bit迁移到64bit[3]
    [Revisit.SolidMCP] 更广泛使用pimpl idiom
  • 原文地址:https://www.cnblogs.com/flippedkiki/p/6915691.html
Copyright © 2011-2022 走看看