Uso básico del rastreador Python 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)
soup.find(<tagName>)
Equivalente a sopa. <tagName> predeterminado primero
print(html.find("a"))
print(html.find("img"))
print(html.find("input"))
soup.find(<tagName>, <tagName.class>)
Se puede buscar el posicionamiento del atributo de etiqueta, incluido <tagName.class>
print(html.find("div", class_="site-nav"))
soup.find_all(<tagName>)
Todas las etiquetas, el valor de retorno es Lista
print(html.find_all("a"))
print(html.find_all("input"))
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"))
1.3 Obtenga el contenido en la etiqueta
text/get_text()
: Obtenga todo el contenido
string
Obtenga 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())
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"])
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()