• 9.3 域名解析与网页爬虫


      Python 3.x 标准库 urllib提供了 rullib.request、urllib.response、urllib.parse 和 urllib.error 4个模块,很好地支持了网页内容读取功能。

      下面的代码演示了如何读取并显示指定网页的内容。

    1 import urllib.request
    2 
    3 fp = urllib.request.urlopen(r'http://www.baidu.com')
    4 
    5 print(fp.read().decode())     #读取了返回HTML
    6 
    7 fp.close()

      下面的代码演示了如何使用GET方法读取并显示指定URL的内容。

    1 import urllib.request
    2 import urllib.parse
    3 
    4 params = urllib.parse.urlencode({'spam':1,'eggs':2,'bacon':0})
    5 url = r'http://www.baidu.com%s'%params
    6 with urllib.request.urlopen(url) as f:
    7     print(f.read().decode('utf-8'))

      下面的代码演示了如何使用POST方法提交参数并读取指定页面内容。

    1 import urllib.request
    2 import urllib.parse
    3 
    4 data = urllib.parse.urlencode({'spam':1,'eggs':2,'bacon':0})
    5 data = data.encode('ascii')
    6 with urllib.request.urlopen(r'http://www.baidu.com',data) as f:
    7     print(f.read().decode('utf-8'))

      下面的代码演示了如何使用HTTP代理访问指定网页。

    1 import urllib.request
    2 
    3 
    4 proxies = {'heet':'http://proxy.example.com:8080/'}
    5 opener = urllib.request.FancyURLopener(proxies)
    6 with opener.open('http://www.python.ory') as f:
    7     f.read().decode('utf-8')

      在IDLE或者Python程序中使用下面的代码调用浏览器打开指定网页:

    1 import webbrowser
    2 
    3 webbrowser.open('www.baidu.com')

      最后,标准库urllib.parse import urlparse 提供了域名解析的功能,支持RUL的拆分与合并以及相对地址到绝对地址的转换。

     1 from urllib.parse import urlparse
     2 
     3 o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
     4 print(o.port)        #80
     5 print(o.hostname)    #www.cwi.nl
     6 
     7 print(o)   #ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
     8 
     9 print(urlparse('www.cwi.nl:80/%7Eguido/Python.html'))  #ParseResult(scheme='www.cwi.nl', netloc='', path='80/%7Eguido/Python.html', params='', query='', fragment='')
    10 
    11 
    12 from urllib.parse import urljoin
    13 print(urljoin('http://www.cwi.nl:80/%7Eguido/Python.html','FAQ.html'))   #http://www.cwi.nl:80/%7Eguido/FAQ.html
    14 print(urljoin('http://www.cwi.nl:80/%7Eguido/Python.html','//www.python.org/%7Eguido'))   #http://www.python.org/%7Eguido
    15 
    16 from urllib.parse import urlsplit
    17 url = r'https://docs.python.org/3/library/urllib.parse.html'
    18 r1=urlsplit(url)
    19 print(r1)        #SplitResult(scheme='https', netloc='docs.python.org', path='/3/library/urllib.parse.html', query='', fragment='')
    20 print(r1.geturl()) #https://docs.python.org/3/library/urllib.parse.html
  • 相关阅读:
    lcx
    交换网络中存在的攻击及加固方法概括
    Hello world~
    CCSPSECURE1 安全理论
    SQL注入经验总结
    Access Control List
    初探java集合框架图
    深入浅出分析LinkedHashMap
    红黑树实现分析
    深入浅出的分析TreeMap
  • 原文地址:https://www.cnblogs.com/avention/p/8984481.html
Copyright © 2020-2023  润新知