Hoy utilicé Beautifulsoup para rastrear el contenido de la novela Romance of the Three Kingdoms en http://www.shicimingju.com/book/sanguoyanyi.html.
-bs4 principio de análisis de datos: -1. Cree una instancia de BeautifulSoup y cargue los datos de origen de la página en el objeto -2. Realice el posicionamiento de etiquetas y la extracción de datos llamando a los atributos o métodos relacionados en el objeto BeautifulSoup -environment installation- pip install bs4 -pip instalar lxml (que es un programa de análisis, se pueden utilizar tanto bs4 y XPath) -Cómo a una instancia del objeto BeautifulSoup: de importación bs4 BeautifulSoup -Objeto instantiation- 1. Cargar los datos en el documento hTML local en el objeto #will Cargue los datos en el documento html local en este objeto fp = open ('./ text.html', 'r', encoding = 'utf-8') soup = BeautifulSoup (fp, 'lxml') -2. El código fuente de la página obtenida en Internet se carga en el objeto page_text = response.text soup = Beatifulsoup (page_text, 'lxml') y atributos proporcionados para el análisis de datos: -soup.tagName:Lo que se devuelve es la etiqueta correspondiente a la primera aparición de tagName (div, a, etc.) en el documento -soup.find (): -find ('tagName'): Equivalente a soup.tagName -Posicionamiento del atributo : -soup.find ('div', class_ (subraya la etiqueta si la escribes) = 'song') -soup.find_all ('tagName'): Devuelve todas las etiquetas que cumplen los requisitos (una lista) -select: -soup.select ('Un selector determinado (id, clase, etiqueta ... selector) + etiqueta'), lo que se devuelve es un selector de nivel de lista -soup.select ('. tang> ul> li> a') [0]:> indica un nivel, selector de nivel -soup.select ('. tang> ul a'): los espacios indican niveles múltiples, ul y La etiqueta li entre a está representada por un espacio -obtener los datos de texto entre las etiquetas -cuando se ubica la etiqueta, como soup.a.text / string / get_text para obtener los datos de texto correspondientes soup.select ('. Tang> ul a') [0].string -text y get_text pueden obtener todo el contenido de texto en una etiqueta- puede -string solo puede obtener los datos de texto directamente debajo de la etiqueta -obtener el valor del atributo en la etiqueta: -soup.a ['herf']
Otro punto importante: ¡el nombre de la etiqueta debe estar escrito correctamente! ! ! ! !
No hay mucho que decir sobre el siguiente código.
import requests
from bs4 import BeautifulSoup
if __name__=='__main__':
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36'
}
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
page_text = requests.get(url=url,headers=headers).text
print(page_text)
#在首页中解析出章节的标题和详情页的url
#1.实例化对象,需要将页面源码数据加载到该对象中
soup = BeautifulSoup(page_text,'lxml')
#解析章节标题和详情页url
li_list = soup.select('.book-mulu >ul >li')
fp = open('./sanguo.text','w',encoding='utf-8')
for li in li_list:
title = li.a.string
detail_url = 'http://www.shicimingju.com'+li.a['href']
#对详情页发起请求,解析出章节内容
detail_page_text = requests.get(url=detail_url,headers=headers).text
#解析出详情页相关的章节内容
detail_soup = BeautifulSoup(detail_page_text,'lxml')
div_tag = detail_soup.find('div',class_='chapter_content')
content = div_tag.text
fp.write(title+':'+content+'\n')
print(title,'爬取成功!!!')
El resultado está en la imagen de arriba.