zoukankan      html  css  js  c++  java
  • 爬虫基础

    需要的模块
    import urllib
    import chardet
    import requests
    from bs4 import BeautifulSoup
    from lxml import etree
    import re
    import gzip
    import hashlib

    #urllib 使用
    urllib.request.urlopen(url,data,timeout)
    '''
    用来发起一个http请求,请求的目标url为url
    请求的参数为data
    注意data需要专用格式(使用字典初始值进行特殊编码)
    例如:需要传输的值为 data={key:value,key2:value}
    那么则data的值应该为 data=urllib.parse.urlencode(data).encode('utf8')
    timeout为设置的超时时间
    '''
    urllib.request.urlopen(req,data,method,timeout)
    '''
    用来发起一个http请求,请求的讲使用rep对象(类型为urllib.request.Request)
    rep对象定义使用:urllib.request.Request(url,data,headers,method)
    url为请求地址,data请求数据,headers为请求使用的请求头部信息字典型,method请求类型(注意全部大写字符串),timeout为设置的超时时间
    请求的参数为data
    注意data需要专用格式(使用字典初始值进行特殊编码)
    例如:需要传输的值为 data={key:value,key2:value}
    那么则data的值应该为 data=urllib.parse.urlencode(data).encode('utf8')
    '''
    #以上两种请求如若正常则会返回一个response响应对象
    '''
    有以下方法:
    read()#获取响应的全部html内容字节流形式
    readline()#获取响应的一行html内容字节流形式
    readlines()#获取响应的html内容字节流形式按照行列表形式组织
    getcode()#获取响应状态码
    geturl()#获取请求url
    getheaders()#获取响应头
    '''
    #因为urllib的请求响应对象中内容为字节流,所以需要解码之后方可使用
    #可以使用chardet模块识别响应内容的编码
    #使用方式如下
    #1、获取识别对象
    html=rep.read()
    charset=chardet.detect(html)
    #2、解码获取字符串
    html=html.decode(charset['encoding'],error='ignore')

    #因为返回结果可能为压缩过的字节流,所以可能需要解压缩
    #通常情况下压缩格式为gzip
    #gzip解压
    #1、获取需要解压的字节流
    html=rep.read()
    #2、解压缩
    html=gzip.decompress(html)

    #requests
    #requests是对于urllib进行的二次包装的一个模块,请返回对象不用考虑编码以及压缩问题
    #请求参数不用考虑编码问题即可直接使用
    #该模块使用其get方法发送get请求
    #实例1get请求:
    rep=requests.get(url=url,headers=headers,params=data,proxies=proxies)
    '''
    url为请求地址
    headers为请求头部,字典型数据
    params为请求参数,字典型数据
    proxies为代理服务器参数,字典型数据({代理服务器类型:代理服务器地址(地址包含端口号)})
    '''
    v#实例2post请求:
    rep=requests.post(url=url,headers=headers,data=data,proxies=proxies)
    '''
    url为请求地址
    headers为请求头部,字典型数据
    data为请求参数,字典型数据
    proxies为代理服务器参数,字典型数据({代理服务器类型:代理服务器地址(地址包含端口号)})
    '''
    #该模块的请求返回为响应对象
    #其有以下重要属性
    rep.encoding#响应默认编码,若rep.text出现乱码可以通过修改其值修正编码
    rep.content #响应结果(未解码已解压)字节流形式
    rep.text#响应结果字符串形式
    rep.url#请求url字符串形式
    rep.raw#响应原始信息(未解压,未解码)字节流形式
    rep.status_code#响应状态码
    rep.headers#响应头部信息

    #bs4是一个对html进行结构化解析的模块
    #在bs4中认为一个标签一个节点,一个标签的属性以及标签的内容都是该标签的子节点
    #每一个节点都是一个bs类型的对象
    #使用步骤:
    #1、构建BeautifulSoup对象
    html=BeautifulSoup(html,'html.parser')
    html.ne
    #html为html格式的字符串
    #2、解析获取结果
    #有以下方法及属性
    find()#获取其参数匹配的第一个节点
    find_all()#获取其参数匹配的所有节点以列表形式返回
    #find,find_all 参数:name,attrs,string 支持正则表达式
    #name为匹配标签名
    #attrs为匹配熟悉及值字典形式
    #string为内容字符串
    node.get_text()#获取node节点的内部的文本内容
    node.text#获取node节点的内部的文本内容
    node.string#获取node节点的子节点的文本内容
    #兄弟节点向前向后一个或所有
    #父节点 祖代节点
    #子节点 后代节点
    #相邻节点前一个后一个或所有节点

    #xpath使用步骤
    #1、构建检索对象
    html=etree.HTML(html)
    #2、利用xpath进行结构化检索
    sel=html.xpath(检索条件)
    #检索结果为列表形式
    #检索符号说明
    #// 定位根节点,会对全文进行扫描
    #/ 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
    #@XXX 代表属性XXX
    #text() 代表文本内容
    #[] 过滤条件 可以是文本表达 text()='XXX' 可以是属性表达 @XXX='xxx' 也可以使用数字代表选择第几个
    #| 一遍用来做条件【或】选择
    #. 代表当前节点
    #.. 代表当前的上一级节点
  • 相关阅读:
    StrBlobPtr类——weak_ptr访问vector元素
    StrBlob类——智能指针作为成员
    关于智能指针类型shared_ptr的计数问题
    桌面计算器——可调用对象练习
    union
    虚析构函数
    条款04 确定对象被使用前已先被初始化
    条款03 尽可能使用const
    Bugku-CTF之web8(txt????)
    Bugku-CTF之各种绕过
  • 原文地址:https://www.cnblogs.com/nanyu/p/9031915.html
Copyright © 2011-2022 走看看