zoukankan      html  css  js  c++  java
  • 07爬虫之-urllib总结

    # # 导入需要的爬虫库。
    import urllib.request
    # # 请求百度的连接。
    # file = urllib.request.urlopen('http://www.baidu.com')
    # # 读取返回的数据。
    # data = file.read()
    # # 将百度返回的数据写入到文件中去。
    # with open('baidu.html','wb') as fhandle:
    # print(fhandle.write(data))
    # # 调用urlretrieve函数直接爬取网页,然后将网页内容写入到文件中。
    # filename = urllib.request.urlretrieve('http://edu.51cto.com','51.html')
    # # 清除缓存。
    # urllib.request.urlcleanup()
    # # 打印网页的基本信息。
    # print(file.info())
    # # 打印返回的状态码。200代表成功返回
    # print(file.getcode())

    # 一般来说,URL的标准中只会允许一部分的ASCII字符,比如数字,字母,部分符号等等。
    # 而其他的一些字符,例如汉字是不符合URL标准的,所以如果我们在URL中使用一些其他不符合标准的字符就会出现问题,
    # 此时需要进行URL编码进行解决。
    # 如果要进行编码,我们可以使用urllib.request.quote()
    # print(urllib.request.quote('http://www.sina.com.cn'))
    # # 如果要进行解码,我们可以这样。
    # print(urllib.request.unquote('http%3A//www.sina.com.cn'))

    # header属性,有时候我们无法爬取一些网站的页面,会出现403的错误。这是网页为了防止别人恶意采集他们的信息
    # 所以进行了一些反爬虫的设置。
    url = 'http://blog.csdn.net/weiwei_pig/article/details/51178226'
    # file = urllib.request.urlopen(url)
    # print(file.getcode())
    # print(file.read())

    # 这时我们就需要进行伪装了,将我们的爬虫伪装成浏览器,然后在进行爬取页面,这样就不会被拦截掉了。

    # 1,使用build_opener()修改报头。
    # 定义一个变量来存储头部信息。
    headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
    # 创建opener对象,
    # opener = urllib.request.build_opener()
    # # 设置opener的头信息,
    # opener.addheaders = [headers]
    # data = opener.open(url).read()
    # print(data)
    # with open('weiwei_pig.html','wb') as fhandle:
    # print(fhandle.write(data))
    # 2,使用add_header()添加报头。
    # 创建一个Request对象赋值给req
    # req = urllib.request.Request(url)
    # req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
    # data = urllib.request.urlopen(req).read()
    # print(data)

    # 超时设置。
    # 有时候我们访问一个网页,长时间服务器没有反应的话,就判断为超时了,我们就不能打开这个网页了。
    # 所以我们需要自己设置一个超时时间。
    # for i in range(1,100):
    # try:
    # file = urllib.request.urlopen('http://yum.iqianyue.com',timeout = 1)
    # data = file.read()
    # print(data)
    # except Exception as e :
    # print("出现异常:",str(e))
    # 这段代码执行的过程中,出现异常: <urlopen error timed out>,都是这样的出现异常,
    # 那是因为我们设置的超时时间太短了,我们请求服务器的操作还没有完成,就被判定为超时了。
    # 我们可以设置的时间稍微长一点,例如30秒,这样就不会超时了。

    # HTTP协议请求。
    # 1,get:get请求通过url网址传递信息,
    # 2,post:可以向服务器提交数据,是一种比较流行的,同时也比较安全的数据传递方式,我们登录的时候就是这样的。
    # 3,put,请求服务器存储的一个资源的时候,通常要指定存储的位置。
    # 4,delete,请求服务器删除一个资源。
    # 5,head:请求获取对应的HTTP报头信息。
    # 6,options,可以获得当前url所支持的请求类型。

    # 1,get,我们平时请求网页的时候基本上都是get请求,例如我们想在百度上边搜索
    # https://www.baidu.com/s?ie=UTF-8&wd=LPL这个就是网址,ie代表编码,wd后边的是我们的关键字。
    # 我们想要搜索的信息是通过url连接的方式传递过去的。
    # keywd = "LPL"
    # url = 'https://www.baidu.com/s?&wd=' + keywd
    # req = urllib.request.Request(url)
    # data = urllib.request.urlopen(req).read()
    # with open('LPL.html','wb') as fhandle:
    # print(fhandle.write(data))

    # z这样我们就能够通过在url中传递消息然后查到我们想要查询的数据。
    # 但是我发现只能够查询英文而不能查询中文,这是因为编码的原因。
    # 需要借助于前面学过的编码知识来进行解决。
    # keywd = "英雄联盟"
    # # 注意这里如果有时候写成https可能会出现错误的。
    # url = 'http://www.baidu.com/s?ie=UTF-8&wd='
    # key_code = urllib.request.quote(keywd)
    # url_all = url + key_code
    # print(url_all)
    # req = urllib.request.Request(url_all)
    # data = urllib.request.urlopen(req).read()
    #
    # with open('英雄联盟.html','wb') as fhandle:
    # print(fhandle.write(data))

    # 2,post
    # import urllib.parse
    # url = 'https://www.iqianyue.com/mypost'
    # # 将需要提交的表单进行编码,然后在设置成utf-8编码
    # postdata = urllib.parse.urlencode({
    # 'name':'ceo@1234435.com',
    # 'pass':'aA123456'
    # }).encode('utf-8')
    # req = urllib.request.Request(url,postdata)
    # req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
    # data = urllib.request.urlopen(req).read()
    # print(data.decode('utf-8'))

    # 我们在用爬虫请求网站的时候,别人是能够看到我们的IP地址的,如果我们的请求过多,就可能有IP被封的风险。
    # 那么有什么解决办法呢,那就是通过代理的方式, 让网站看不到我们真是的IP地址。
    # def use_proxy(proxy_addr,url):
    # # 设置代理服务器信息
    # proxy = urllib.request.ProxyHandler({'http':proxy_addr})
    # # 创建全局默认的opener对象。
    # opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    # urllib.request.install_opener(opener)
    # data = urllib.request.urlopen(url).read().decode('utf-8')
    # return data
    # proxy_addr = '202.75.210.45:7777'
    # data = use_proxy(proxy_addr,'http://www.baidu.com')
    # print(len(data))

    # 异常处理
    import urllib.error
    try:
    # 爬取csdn博客
    file = urllib.request.urlopen('http://blog.csdn.net')
    print(file.read().decode('utf-8'))
    except urllib.error.URLError as e:
    print(e.code)
    print(e.reason)
  • 相关阅读:
    Idea14 生成webservices
    第10组 Beta冲刺(4/4)
    2019 SDN上机第7次作业
    第10组 Beta冲刺(3/4)
    第10组 Beta冲刺(2/4)
    第10组 Beta冲刺(1/4)
    2019 SDN上机第6次作业
    SDN课程阅读作业(2)
    2019 SDN上机第5次作业
    第10组 Alpha冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/cong12586/p/14063239.html
Copyright © 2011-2022 走看看