Solo tres trucos para aprender todas las habilidades de un rastreador de sitios web sencillo

Hoy, el editor comparte las pequeñas habilidades de recopilar tres sitios web de rastreadores. Espero que te resulte útil ~

查看网页源代码和检查元素

requests使用

BeautifulSoup使用

Ver el código fuente de la página web e inspeccionar elementos

Insertar descripción de la imagen aquí

No creas que es muy sencillo, estos dos trucos son la base de los reptiles. Si está familiarizado con estos dos trucos, rastreadores de sitios web sencillos, habrá aprendido la mitad.

En general, todo lo que veas en un elemento de inspección aparecerá en el código fuente de la página. El ejemplo que elegí hoy es un caso especial: el contenido visto en el elemento de inspección aparecerá en el código fuente de la página web.

Insertar descripción de la imagen aquí

Por ejemplo, subir las temperaturas diurnas y nocturnas en Beijing.

Sitio web del tiempo en Beijing:

http://www.weather.com.cn/weather1d/101010100.shtml

El siguiente es el código fuente, tendré comentarios, léanlo juntos.

Talk is cheap. Show you the code

# -*- coding: utf-8 -*-

__author__ = 'duohappy'

import requests # 导入requests模块

from bs4 import BeautifulSoup # 从bs4包中导入BeautifulSoup模块

# 设置请求头

# 更换一下爬虫的User-Agent,这是最常规的爬虫设置

headers = {
    
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}

# 需要爬取的网址

url ="http://www.weather.com.cn/weather1d/101010100.shtml"

# 发送请求,获取的一个Response对象

web_data = requests.get(url,headers=headers)

# 设置web_data.text会采用web_data.encoding指定的编码,一般情况下不需要设置,requests会自动推断

# 鉴于网页大部分都是采取utf-8编码的,所以设置一下,省去一些麻烦

web_data.encoding = 'utf-8'

# 得到网页源代码

content = web_data.text

# 使用lxml解析器来创建Soup对象

soup = BeautifulSoup(content, 'lxml')

# 为什么要创建一个Soup对象,还记得浏览器中的检查元素功能嘛

# Soup对象可以方便和浏览器中检查元素看到的内容建立联系,下面会有动画演示

# 使用css selector语法,获取白天和夜间温度,下面有动画演示

tag_list = soup.select('p.tem span')

# tag_list[0]是一个bs4.element.Tag对象

# tag_list[0].text获得这个标签里的文本

day_temp = tag_list[0].text

night_temp = tag_list[1].text

print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))

¿Qué significa "el objeto Soup puede establecer fácilmente una conexión con el contenido visto al inspeccionar elementos en el navegador"?

Una explicación simple es que el elemento de inspección se parece al elemento del objeto Sopa (esto es solo una comprensión simplificada)

Insertar descripción de la imagen aquí

sintaxis del selector css

Vale la pena mencionar que al buscar 'p.temem', hay exactamente 2 objetos coincidentes, correspondientes a la temperatura diurna y nocturna respectivamente. Esto es muy importante. Si el número de coincidencias es mayor o menor que 2, entonces ¡Significa que tu selector CSS escribe mal!

Insertar descripción de la imagen aquí

Aumente las temperaturas diurnas y nocturnas de varias ciudades, busque el clima en diferentes ciudades y observe cambios en las URL. Observar cambios en las URL es una de las habilidades más importantes de los rastreadores ~

# -*- coding: utf-8 -*-

__author__ = 'duohappy'

import requests

from bs4 import BeautifulSoup

headers = {
    
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}

# 建立城市和网址特殊部分的对应关系

weather_code = {
    
    '北京':'101010100','上海':'101020100','深圳':'101280601', '广州':'101280101', '杭州':'101210101'}

city = input('请输入城市名:') # 仅仅能输入北京,上海,广州,深圳,杭州

url ="http://www.weather.com.cn/weather1d/{}.shtml".format(weather_code[city])

web_data = requests.get(url,headers=headers)

web_data.encoding = 'utf-8'

content = web_data.text

soup = BeautifulSoup(content, 'lxml')

tag_list = soup.select('p.tem span')

day_temp = tag_list[0].text

night_temp = tag_list[1].text

print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))

hermosasopa

BeautifulSoup es un conjunto de herramientas de análisis de páginas web HTML de terceros proporcionado por Python. Para una URL, puede utilizar las funciones miembro del objeto beautifulSoup para encontrar directamente el contenido del componente correspondiente. Para contenidos como texto e información, a menudo se escribe directamente en el código de texto de la página web. Utilizando las herramientas de desarrollo de Google Chrome, podemos leer directamente el código fuente de la página web:

Insertar descripción de la imagen aquí

Puede usar la flecha pequeña a la derecha para ubicar directamente la ubicación que debe rastrearse y encontrará que esta información está escrita directamente en el código fuente a la derecha. No es necesario actualizar la información de texto en tiempo real y no existe una forma conveniente de mantener los datos.

Utilice el objeto bs para buscar y procesar, de modo que podamos escribir un código simple:

1.bs = BeautifulSoup(html_news,'html.parser')

2.title = bs.find('h1').text

3.content= bs.find('div',class_='content-article').text //注意参数带下划线

4.content_str = "".join(re.findall('[0-9\u4e00-\u9fa5]', content))

Pero podemos ver que todos los párrafos están en el componente p, por lo que el código también se puede escribir así: El código es el siguiente (ejemplo):

1.cur_str = ""

2.bs = BeautifulSoup(html_news,'html.parser')

3.title = bs.find('h1').text

4.paras = bs.find_all('p',class_='one-p') //返回一个列表

5.for para in paras:

6.cur_str += "".join(re.findall('[0-9\u4e00-\u9fa5]', para.text))

Aquí se utilizan expresiones regulares para extraer texto y números. Preste especial atención al hecho de que la función de búsqueda busca un elemento, mientras que find_all devuelve una lista. Lo que re.find_all encuentra también es una lista. Al regresar, se debe usar "".join para concatenarlo en una cadena. De hecho, la capa inferior de BeautifulSoup son expresiones regulares, por lo que las funciones miembro también son similares.

Supongo que te gusta

Origin blog.csdn.net/Z987421/article/details/132746254
Recomendado
Clasificación