zoukankan      html  css  js  c++  java
  • beautyfulsoup模块

    爬虫最常见的是处理反扒措施:常见的反扒措施

    user-agent :用户请求浏览器信息(需要要携带) 

    refer:请求到来的路径 有时候需要携带

    token:服务器发送的验证字符串,需要分析

    cookies:可以使用session处理

    requests属性

    最常用的两个函数:get() post()

    参数有:

    params={"":""},可以指定请求路径中的参数,自动解析

    headers={}:请求头信息,需要关键字参数:如:"user-agent"="","refer":"",等等

    resp = requests.get(url=url,params=params,headers=headers)

    resp.text:响应返回的文本信息

    resp.content:响应返回的二进制数据(可以用来传输图片video等)

    resp.status-code:相应的状态码(判定是否请求成功)

    resp.url:请求的路径

    resp.cookies:获取返回的cookies信息(是一个对象)

    resp.cookies.get_dict():获取返回cookies信息的字典格式可以通过get获取

    resp.json():将返回的json数据进行反序列化

    resp.requests:请求的方法

    resp.apparent_encoding:从文档中获取编码的方式

    resp.encoding:默认的编码方式可指定

    resp.headers:查看响应头(好像是可以获取浏览器中的信息)

    resp.history:重定向历史  即前一次请求的地址

    resp.url:当前的请求地址

    可以在get方法中指定参数streamTrue

    流流的方式获取数据,没有经过HTPP协议解析的数据

    resp.raw.read(100)读取100字节(没什么用)

    当文档的编码方式与response解码方式不同时,就需要手动指定

    resp.encoding  = resp.apparent_encoding

    对于返回值为json格式的处理

    jsonresp = resp.get("http://v.juhe.cn/toutiao/inedx")

    print(jsonresp.text)

    print(jsonresp.json())

    对于post请求,data和json都能传递参数

    其中data方式拼接为 name=jerry&pwd=123

    json直接序列化为字符串

    超时时间 第一个参数为连接超时时间,第二个表示响应超时时间

    requets.post(url,timeout=()10,10))

    allow_redirects是否允许重定向

    代理池:对于爬虫而言是一个相当重要的参数

    Ps=,["""""""""""",,""""",,,",",""]

    import random

    使用代理服务器请求

    resp = request.post(url,proxies={"HTTP":randoim.choice(Ps)})

    verify证书验证,目前已基本不再使用,都换成了HTTPS请求

    Import requests

    response=  requests.get(url,cert=("qiwuedghqd./fwe"),verify=True)

    上传文件:

    f = open('路径名','rb)

    接受一个字典,key是服务器用于提取文件的字段名,f是要上传的文件对象

    resp = requests.post(url,files={"img":f})

    beautifulSoup模块

    在之前的爬虫程序中,使用了大量正则获取数据,效率非常低,beautifulSoup是一个第三方模块,专门用于解析XML文档,目前最稳定的是bs4版本

    from bs4 import BeaustifulSoup

    html_doc = """fvuiwbfuiwebfiwbfwib"""

    第一个参数为要解析的文档数据,可以是字符串,也可以是一个文件对象

    第二个参数表示要使用的解析器,每个解析器都有不同的特点,推荐是lxml,速度快

    soup = BeautifulSoup(html_doc,"lxml")

    一个标分为三部分:标签名字,标签属性,标签内容

    tag = soup.body

    tag.name tag.text tag.attrs

    使用.语法来查找标签,注意查找范围是全文只能找第一个与名字匹配的标签

    可以嵌套

    获取子节点:

    soup.p.children返回的是一个迭代器可以使用list转型

    soup.head.contents:返回一个列表

    获取父标签soup.p.parent

    soup.p.parents获取所有的父辈标签

    soup.p.descendants#获取所有子孙标签,不同之处在于,会把所有子孙标签全部拆出来,包括文本内容

    获取兄弟标签,文本也被当做一个节点

    下一个兄弟:soup.a.next_sibling.next_sibling

    过滤器

    fin_all查找所有匹配的标签

    按照名字匹配,可以传一个名字,或一个列表

    find_all("a"),find_all(["a","b"])

    查找id为link1的a标签

    soup.find_all("a",attrs={"id":"link1"})  soup.find_all(name="a",id="link1")

    查找标签为a类名为sister的

    soup.find_all("a",attrs={"class":"sister"})

    注意如果按照条件为class来查找,需要使用class_,因为class是关键字

    多个类名加空格即可

    soup.gind_all(name="a",class_="sister.brother")

    如果属性中带有特殊符号,可以把条件装在attrs中

    可以指定按照文本内容查找:

    soup.find_all(name="a",text="sb")

    过滤器:

    标签名称中带有b字母的标签

    soup.find_all(name="b")

    正则匹配

    c = re.compile("b")

    soup.find_all(name=c)

    数组

    soup.find_all(name=["body","a"])

    True表示所有标签,soup.find_all(True) 

    所有具备id属性的标签 soup.find_all(id=True)

    方法匹配(可以写个函数匹配)

    def Filter(tag):

      return tag.name == "a" and tag.text != "sb" and tag.has_attr("id")

    soup.find_all(name="a",limit=1)显示结果为一条

    find方法等同于find_all

    选择器

    soup.select("a")

    soup.select(".sister")

    soup.select("#link1")

    soup.select("p>ssss")

  • 相关阅读:
    Object Files (.obj)
    使用IIS Microsoft的web服务器和ftp服务器
    关于matlab
    char, signed char, unsigned char的区别
    百度面试
    google笔试题_2011
    ioctl 函数与网络接口
    Unity之热更新:(三)XLua
    C#之设计模式:观察者模式
    C#:委托
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10697916.html
Copyright © 2011-2022 走看看