Uso básico del análisis de datos Python crawler bs4

Descargo de responsabilidad: desde la publicación de este artículo, este artículo es solo para referencia y no se puede reproducir ni copiar. Si la parte que lee este artículo está involucrada en alguna violación de las leyes y regulaciones nacionales, todas las consecuencias correrán a cargo de la parte que lea este artículo y no tenga nada que ver con el bloguero de este artículo. Y debido a la reimpresión, copia y otras operaciones de la parte que lee este artículo, cualquier disputa causada por la violación de las leyes y regulaciones nacionales y todas las consecuencias correrán a cargo de la parte que navega en este artículo y no tienen nada que ver con el bloguero de este artículo.

import requests
from bs4 import BeautifulSoup

1. sintaxis básica de bs4

1.1 Obtener página html

Obtener la página html local

# 读取文件
fp = open("./data/base/taobao.html", "r", encoding="UTF-8")
# 数据加载到该对象中 (本地的 html 文件)
html = BeautifulSoup(fp, "lxml")
print(html)

Leer el sitio web para obtener la página html

# 爬取页面
response_text = requests.get(url="https://s.taobao.com/").text
# 数据加载到该对象中 (网络的 html 文件)
html = BeautifulSoup(response_text, "lxml")
print(html)

1.2 Obtener etiquetas

soup.<tagName>
El valor predeterminado es el primero, ninguna etiqueta devuelve Ninguno

print(html.a)
print(html.img)
print(html.input)

Inserte la descripción de la imagen aquí

soup.find(<tagName>)
Equivalente a sopa. <tagName> predeterminado primero

print(html.find("a"))
print(html.find("img"))
print(html.find("input"))

Inserte la descripción de la imagen aquí

soup.find(<tagName>, <tagName.class>)
Se puede buscar el posicionamiento del atributo de etiqueta, incluido <tagName.class>

print(html.find("div", class_="site-nav"))

Inserte la descripción de la imagen aquí

soup.find_all(<tagName>)
Todas las etiquetas, el valor de retorno es Lista

print(html.find_all("a"))
print(html.find_all("input"))

Inserte la descripción de la imagen aquí

soup.select(<select>)
Utilice el selector de clases para buscar etiquetas, todas las etiquetas, el valor de retorno es Lista

print(html.select(".bang"))
print(html.select("#J_SearchForm .search-button"))
print(html.select(".copyright"))

Inserte la descripción de la imagen aquí

1.3 Obtenga el contenido en la etiqueta

text/get_text(): Obtenga todo el contenido
stringObtenga contenido directo

print(html.find("div", class_="search-button").text)
print(html.find("div", class_="search-button").string)
print(html.find("div", class_="search-button").get_text())

Inserte la descripción de la imagen aquí

1.4 Obtenga los atributos en la etiqueta

[<attribute>]

print(html.a["href"])
print(html.find("div")["class"])
print(html.find_all("div")[5]["class"])

Inserte la descripción de la imagen aquí

2. Ejemplos

Contenido del artículo de Three Kingdoms

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests
from bs4 import BeautifulSoup


if __name__ == '__main__':

    # url, UA, 参数
    url = "https://www.shicimingju.com/book/sanguoyanyi.html"
    headers = {
    
    
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
    }
    # 爬取页面
    html = requests.get(url=url, headers=headers, timeout=5).text
    # 数据加载到该对象中 (网络的 html 文件)
    soup = BeautifulSoup(html, "lxml")
    # 得到想要的标签 (含有章节的)
    content = soup.select("div.book-mulu > ul > li > a")

    # 文件
    fp = open("./data/sgyy/sgyy.txt", "w", encoding="utf-8")
    fp.write("章节\t链接\t内容\n")
    for c in content:
        # 爬取章节详细叙述的内容
        href_text = requests.get(url="https://www.shicimingju.com" + c["href"], headers=headers, timeout=5).text
        # 添加章节详细叙述的内容
        href_soup = BeautifulSoup(href_text, "lxml")
        href_text = href_soup.find("div", class_="chapter_content").text
        # 添加章节的名称, 链接, 内容.
        fp.write(f'{c.text}\t{"https://www.shicimingju.com" + c["href"]}\t{href_text}\n')
        print(c.text + " 添加完成")
    fp.close()

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/YKenan/article/details/111942335
Recomendado
Clasificación