Python网络爬虫与信息提取【提取,规则】

网络爬虫之规则

常用的ide工具

Requests库入门

网站:http://www.python-requests.org

  • Requests库安装方法(windows下)

    • 安装python

    • 以管理员权限打开Windows PowerShell,输入命令pip install requests安装

    • 打开idle,输入命令import requests引入requests库

    • 访问百度测试

      r = requests.get("http://www.baidu.com")
      r.status_code
      
      # 输出状态码
      # 200
      
      # 更改编码,并打印网页内容
      r.encoding = 'utf-8'
      r.text 
      
  • Requests库的7个主要方法

    方法说明
    requests.request()构造一个请求,支撑一下各方法的基础方法
    requests.get()获取HTML网页的主要方法,对应HTTP的GET
    requests.head()获取HTML网页头的信息方法,对应HTTP的HEAD
    requests.post()向HTML网页提交POST请求方法,对应HTTP的POST
    requests.put()向HTML网页提交PUT请求的方法,对应HTTP的PUT
    requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH
    requests.delete()向HTML页面提交删除请求,对应HTTP的DELETE
  • requests库的request方法

    requests.request(method,url,**kwargs)

    method:请求方式,对应get/put/post等7种
    url:拟获取页面流程的url链接
    **kwargs:控制访问的参数,共13个

    **kwargs:控制访问的参数,均为可选项

    1.1 params:字典或字节序列,作为参数增加到url中

    # 例子
    >>> kv = {'key1':'value1','key2':'value2'}
    >>> r = requests.request('GET','http://python123.io/ws',params=kv)
    >>> print(r.url)
    http://python123.io/wa?key1=value1&key2=value2 
    

    1.2 data:字典、字节序列或文件对象,作为Request的内容

    >>> kv = {'key1':'value1','key2':'value2'}
    >>> r = requests.request('GET','http://python123.io/ws',data=kv)
    >>> body='主体内容'
    >>> r = requests.request('GET','http://python123.io/ws',data=body)
    

    1.3 json: JSON格式的数据,作为Request的内容

    >>> kv = {'key1':'value1'}
    >>> r = requests.request('GET','http://python123.io/ws',json=kv)
    

    1.4 headers: 字典,HTTP定制头

    >>> hd = {'user-agent':'Chrome/10'}
    >>> r = requests.request('POST','http://python123.io/ws',headers=hd)
    

    1.5 cookies: 字典或CookieJar,Request中的cookie

    1.6 auth: 元祖,支持HTTP认证功能

    1.7 files:字典类型,传输文件

    >>> fs = {'file':open('data.xls','rb')}
    >>> r = requests.request('POST','http://python123.io/ws',files=fs)
    

    1.8 timeout: 设定超时时间,秒为单位

    >>> r = requests.request('GET','http://www.baidu.com',timeout=10)
    

    1.9 proxies: 字典类型,设定访问代理服务器,可以增加登录认证

    >>> pxs = {'http':'http://user:pass@10.10.10.1:1234',
                   'https':'https://10.10.10.1:4321'}
    >>> r = requests.request('GET','http://www.baidu.com',timeout=10)
    

    1.10 allow_redirects : True/False,默认为True,重定向开关

    1.11 stream: True/False,默认为True,获取内容立即下载开关

    1.12 verify: True/False,默认为True,认证SSL证书开关

    1.13 cert: 本地SSL证书路径

  • requests库的get方法

    requests.get(url,params=None,**kwargs)

    url:拟获取页面的url链接
    params:url中的额外参数,字典或字节流格式,可选
    **kwargs:12个控制访问的参数

  • requests库的head方法

    request.head(url,**kwargs)

    url:拟获取页面流程的url链接
    **kwargs:控制访问的参数,共13个

  • requests库的post方法

    request.post(url,data=None,json=None,**kwargs)

    url:拟获取页面流程的url链接
    data: 字典、字节序列或文件对象,作为Request的内容
    json: JSON格式的数据,作为Request的内容
    **kwargs:控制访问的参数,共11个

  • requests库的put方法

    request.put(url,data=None,**kwargs)

    url:拟获取页面流程的url链接
    data: 字典、字节序列或文件对象,作为Request的内容
    **kwargs:控制访问的参数,共12个

  • requests库的patch方法

    request.patch(url,data=None,**kwargs)

    url:拟获取页面流程的url链接
    data: 字典、字节序列或文件对象,作为Request的内容
    **kwargs:控制访问的参数,共12个

  • requests库的delete方法

    request.delete(url,**kwargs)

    url:拟获取页面流程的url链接
    **kwargs:控制访问的参数,共13个

  • Response对象的属性

    属性说明
    r.status_codeHTTP请求的返回状态,200表示连接成功,400表示失败
    r.textHTTP响应内容的字符串形式,即,url对应的页面内容
    r.encoding从HTTP header中猜测的响应内容编码方式
    r.apparent_encoding从内容中分析的响应内容编码方式(备选编码方式)
    r.contentHTTP响应内容的二进制形式
  • Requests库的异常

    异常说明
    requests.ConnectionError网络连接错误异常,如DNS查询失败,拒绝连接等
    requests.HTTPErrorHTTP错误异常
    requests.URLRequiredURL缺失异常
    requests.TooManyRedirects超过最大重定向次数,产生重定向异常
    requests.ConnectTimeout连接远程服务器超时异常
    requests.Timeout请求URL超时,产生超时异常
    r.raise_for_status()如果不是200,产生异常requests.HTTPError
  • 爬取网页通用代码框架

    import requests
    
    def getHTMLText(url):
        try:
            r = requests.get(url,timeout=30)
            r.raise_for_status() #如果状态不是200,引发HTTPError异常
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return "产生异常"
    
    if _name_ == "_main_":
        url = "http://www.baidu.com"
        print(getHTMLText(url))
    
  • HTTP协议对资源的操作

    方法说明
    GET请求获取URL位置的资源
    HEAD请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
    POST请求URL位置的资源后附加新的数据
    PUT请求像URL位置存储一个资源,覆盖原URL位置的资源
    PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容
    DELETE请求删除URL位置存储的资源

爬虫引发的问题

  • 网络爬虫的尺寸

  • Robots协议

    Robots Exclusion Standard 网络爬虫排除标准

    作用:网站告知网络爬虫哪些页面可以爬取,哪些页面不行

    形式:在网站根目录下的robots.txt文件

    案例:京东的Robots协议 https://www.jd.com/robots.txt

   User-agent: * 
   Disallow: /?* 
   Disallow: /pop/*.html 
   Disallow: /pinpai/*.html?* 
   User-agent: EtaoSpider 
   Disallow: / 
   User-agent: HuihuiSpider 
   Disallow: / 
   User-agent: GwdangSpider 
   Disallow: / 
   User-agent: WochachaSpider 
   Disallow: /
  • Robots协议的使用

    网络爬虫:自动或人工识别robots.txt,再进行内容爬取。

    约束性:Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险

  • 百度搜索全代码

  • 网络图片的爬取

    网络图片链接的格式
    http://www.example.com/picture.jpg

    图片爬取代码


网络爬虫之提取

Beautiful Soup

  • Beautiful Soup 安装

    在管理员shell下输入pip install beautifulsoup4安装

  • Beautiful Soup库解析器

  • Beautiful Soup类的基本元素

   >>> import requests
   >>> r = requests.get("http://python123.io/ws/demo.html")
   >>> demo = r.text
   >>> from bs4 import BeautifulSoup
   >>> soup = BeautifulSoup(demo,"html.parser")
   >>> print(soup.prettify())
   >>> soup.title
   <title>This is a python demo page</title>

   >>> tag = soup.a
   >>> tag
   <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>

   >>> from bs4 import BeautifulSoup
   >>> soup = BeautifulSoup(demo,"html.parser")
   >>> soup.a.name
   'a'
   >>> soup.a.parent.name
   'p'
   >>> soup.a.parent.parent.name
   'body'

   >>> tag = soup.a
   >>> tag.attrs
   {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
   >>> tag.attrs['class']
   ['py1']
   >>> type(tag.attrs)
   <class 'dict'>
   
   >>> soup.a
   <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic 
   Python</a>
   >>> soup.a.string
   'Basic Python'
   >>> soup.p
   <p class="title"><b>The demo python introduces several python courses.</b></p>
   >>> soup.p.string
   'The demo python introduces several python courses.'
  • 标签树的下行遍历
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值