[Reptil] biblioteca U11_BeautifulSoup4 python3 para extraer datos Detallado


Se hace referencia en las siguientes secciones de 51job.com en fuente de pieza para presentaciones de casos, todos los siguientes se basan en casos reales para analizar biblioteca BeautifulSoup4 para extraer datos.
51job.com en parte en los códigos fuente utilizado en la siguiente :( "前程无忧" códigos representan menos)

<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120207510" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="python教师" href="https://jobs.51job.com/kunming-whq/120207510.html?s=01&t=0"  onmousedown="">
                python教师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南通识教育信息咨询有限公司" href="https://jobs.51job.com/all/co5751385.html">云南通识教育信息咨询有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">4.5-6千/月</span>
    <span class="t5">03-29</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="118417429" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python工程师" href="https://jobs.51job.com/kunming-whq/118417429.html?s=01&t=0"  onmousedown="">
                Python工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南蓝典科技股份有限公司" href="https://jobs.51job.com/all/co4646964.html">云南蓝典科技股份有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">4-6千/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120703493" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="YX00-Python开发工程师" href="https://jobs.51job.com/kunming-gdq/120703493.html?s=01&t=0"  onmousedown="">
                YX00-Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南远信科技有限公司" href="https://jobs.51job.com/all/co2256249.html">云南远信科技有限公司</a></span>
    <span class="t3">昆明-官渡区</span>
    <span class="t4">4-8千/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="117230454" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming/117230454.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南紫米科技有限公司" href="https://jobs.51job.com/all/co4672988.html">云南紫米科技有限公司</a></span>
    <span class="t3">昆明</span>
    <span class="t4">0.8-1万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="117148016" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python高级开发工程师" href="https://jobs.51job.com/kunming-plq/117148016.html?s=01&t=0"  onmousedown="">
                Python高级开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="微加普惠金融服务(深圳)有限公司" href="https://jobs.51job.com/all/co5633133.html">微加普惠金融服务(深圳)有限公司...</a></span>
    <span class="t3">昆明-盘龙区</span>
    <span class="t4">1-2万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="118740280" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Java/大数据/python 讲师" href="https://jobs.51job.com/kunming/118740280.html?s=01&t=0"  onmousedown="">
                Java/大数据/python 讲师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南新华计算机中等专业学校" href="https://jobs.51job.com/all/co3757091.html">云南新华计算机中等专业学校</a></span>
    <span class="t3">昆明</span>
    <span class="t4">0.5-1万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="104297888" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming-whq/104297888.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南创至互达网络科技有限公司" href="https://jobs.51job.com/all/co4670824.html">云南创至互达网络科技有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">0.6-1万/月</span>
    <span class="t5">03-19</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120456484" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming/120456484.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云思华盛(北京)科技有限公司" href="https://jobs.51job.com/all/co2898169.html">云思华盛(北京)科技有限公司</a></span>
    <span class="t3">昆明</span>
    <span class="t4">10-15万/年</span>
    <span class="t5">03-14</span>
</div>

1. Obtener todas las etiquetas p

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
ps = soup.find_all('p')
for p in ps:
    print(p)
    print("=" * 40)

P es el código de salida de un tipo de etiqueta, pero a partir de bs4.element Tag importación, la etiqueta entra en esta clase, podemos encontrar los siguientes métodos: __repr__se puede observar en la figura, este método puede imprimir un elemento de cuerda a cabo.

los resultados de salida de la FIG son los siguientes:

2. Obtener las dos primeras etiquetas p

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
p = soup.find_all('p',limit=2)[1] # limit=2:最多提取2个标签
print(p)

los resultados de salida de la FIG son los siguientes:

3. Obtenga toda la clase de un lapso igual a t3

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
spans = soup.find_all('span',class_='t3') # 此处使用class_,由于class是关键字
# 上述语句也可以使用attrs替换:spans = soup.find_all('span',attrs=({'class':"t3"}))
for span in spans:
    print(span)
    print("=" * 40)

4. Obtener la misma clase cheque, el nombre de la etiqueta em igual delivery_em

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
# 错误的语法:emList = soup.find_all('em', class_="check" ,name="delivery_em" )
emList = soup.find_all('em', attrs = {'class':"check" ,'name':"delivery_em"} )
for em in emList:
    print(em)
    print("=" * 40)

En este caso, si se utiliza emList = soup.find_all('em', class_="check" ,name="delivery_em" ), se da a continuación, debido a que: findall () no puede ser utilizado directamente como un nombre de parámetro

5. Obtener toda clase de atributo href como una etiqueta en la etiqueta de p t1

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
pList = soup.find_all('p',class_='t1')
for p in pList:
    aList = p.find_all('a')
    for a in aList:
        # 1)通过下标操作(推荐使用,语法简洁明了)
        href = a['href']
        print(href)
        print("=" * 40)

        # 2)通过attrs属性
        # href = a.attrs['href']
        # print(href)
        # print("=" * 40)

salida:

6. Obtener todos los puestos de trabajo (texto)

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
divs = soup.find_all('div')[1:]
infoSet = list()
for div in divs:
    info = {}
    infos = list(div.stripped_strings) # div.stripped_strings返回的是一个生成器
    info['job'] = infos[0]
    info['company'] = infos[1]
    info['address'] = infos[2]
    info['salary'] = infos[3]
    info['ReleaseDate'] = infos[4]
    infoSet.append(info)
print(infoSet)

salida:

7. Resumen

Utilice de 7.1 find_all

  • 1. Cuando la etiqueta se extrae, el primero es el nombre de la etiqueta. Si desea utilizar el filtro de atributo de etiqueta en la extracción de la etiqueta, que puede ser en forma de argumentos de palabra clave, el nombre de la propiedad y el valor correspondiente en el proceso de transferencia de, o el uso attrsde propiedad, todos los atributos y el correspondiente poner en valor pasar en un diccionarioattrs
  • 2. limitpropiedad para limitar el número de etiquetas extraída

7.2 encontrar la diferencia y find_all

  • encontrar: encontrar la primera etiqueta para satisfacer las condiciones de devolución
  • find_all: satisfaga todas las condiciones de la etiqueta de devolución

7.3 hallazgo y filtros find_all

  • parámetros de palabras clave: el nombre del atributo como un valor de clave como un parámetro para palabras clave de filtro y el valor de la propiedad, tales como: soup.find_all ( 'p', clase _ = 't1')
  • attrs parámetros: la condición de atributo en un diccionario, pasaron parámetro attrs. Tales como: soup.find_all ( 'p', attrs = { 'clase': 't1'})

propiedad 7,4 adquirir de la etiqueta

  • Se obtiene por el subíndice
href = a['href']
  • La obtención de la propiedad por attrs
href = a.attrs['href']

7.5 cuerdas y stripped_strings, propiedades de cadena, y métodos get_text

  • string: String Obtiene fuera de la etiqueta debajo de una etiqueta, devuelve una cadena.
  • cadenas: String Obtiene hijos sin etiquetar con una etiqueta, devuelve un generador.
  • stripped_strings: obtener los hijos de las cadenas no etiqueta bajo una etiqueta, eliminará los espacios en blanco caracteres, devuelve un generador.
  • get_text: Obtener descendientes de las cadenas no etiqueta en una etiqueta, no se devuelve como un generador.

Supongo que te gusta

Origin www.cnblogs.com/OliverQin/p/12595647.html
Recomendado
Clasificación