Crawler: rastreo de los precios de la vivienda en Guiyang (implementación de Python)

contenido

1 Prefacio

1.1 Filosofía provocada por la presión de la supervivencia

1.2 Comprar una casa y esclavos domésticos

2 reptiles 

2.1 Conceptos básicos

2.2 El proceso básico del rastreador 

3 Rastreando los precios de la vivienda en Guiyang y escribiendo en la mesa

3.1 Visualización de resultados

3.2 Implementación de código (Python) 

 


1 Prefacio

1.1 Filosofía provocada por la presión de la supervivencia

Malthus descubrió por primera vez que la capacidad innata de las criaturas para multiplicarse de acuerdo con la progresión geométrica siempre es mayor que su capacidad de supervivencia real o la población sobreviviente real . A su vez, se especula que la competencia intraespecífica de las criaturas debe ser extremadamente cruel e inevitable. Dejando de lado si es necesario que Malthus emita una advertencia correspondiente a la humanidad, solo hay una serie de preguntas básicas implícitas en este fenómeno, tales como, ¿cuál es el límite natural de la capacidad de sobreproducción de los organismos? ¿En qué ventajas confían los sobrevivientes de la competencia intraespecífica para ganar? ¿Y adónde se dirigen estos llamados grupos aventajados? Y así sucesivamente, es suficiente para hacer que cualquier persona pensante reflexione (miedo) profundamente.

Más tarde, en la introducción a su libro histórico "El origen de las especies" , Darwin mencionó deliberadamente la contribución científica y la ilustración de la teoría de Malthus. Se puede ver que ser el amigo íntimo del anciano sacerdote no está calificado para la gente común. !

1.2 Comprar una casa y esclavos domésticos

Al casarse ahora, la mujer generalmente requiere que el hombre tenga una casa y un auto. De hecho, no se puede culpar a la chica. En la sociedad actual altamente desarrollada y turbulenta, este requisito no es realmente alto. Sin embargo, desde la reforma y la apertura, la clase se ha solidificado y ¡nuestra generación está en problemas! Echemos un vistazo a los precios de la vivienda en Guiyang (nueva casa de Lianjia: https://gy.fang.lianjia.com/ )

   

No puede ser eliminado por los tiempos, no siempre puede suspirar, hay muy pocos grandes capitalistas que comenzaron desde cero, y Liu Qiangdong es uno de ellos. Los ídolos son ídolos, vuelve a la realidad, los niños rurales pueden comprar una casa, o pueden ser esclavos domésticos de por vida. Cuando regresan al campo, son admirados por otros con una apariencia brillante y hermosa, y solo ellos conocen el dolor y agravios en sus corazones. En vista de esto, personalmente no quiero ser un esclavo de la casa y del automóvil. Mi felicidad es mía, mi vida es mía y vivo mi propia vida maravillosa, no para que otros la vean. Quiero hacer mi propio destino hermoso y colorido Lo que hago es mejorar mi habilidad, ¡no quiero ser un esclavo de la casa!

El corazón está lleno de sangre y el suspiro ha terminado, es hora de volver al tema de hoy. ¿Por qué no obtener estos datos en una tabla de documentos para su análisis y análisis? Simplemente haga lo que dice, simplemente use un rastreador para rastrear y luego escríbalo en el documento.

2 reptiles 

2.1 Conceptos básicos

Web crawler (Crawler): también conocido como web spiders, o web robots (Robots), es un programa o script que automáticamente toma información de la World Wide Web de acuerdo a ciertas reglas. En otras palabras, puede obtener automáticamente el contenido de la página web en función de la dirección del enlace de la página web. Si Internet se compara con una gran telaraña, hay muchas páginas web en ella, y las arañas web pueden obtener el contenido de todas las páginas web.
Un rastreador es un programa o script automatizado que simula el comportamiento de los humanos que solicitan un sitio web y descarga los recursos del sitio web en lotes.

Crawler : una forma de obtener información del sitio web en lotes utilizando cualquier medio técnico. La clave es el tamaño del lote.
Anti-crawler : Una forma de evitar que otros obtengan información en tu propio sitio web por lotes utilizando cualquier medio técnico. La clave también es el tamaño del lote.
Lesión accidental : en el proceso de anti-rastreo, los usuarios comunes se identifican erróneamente como rastreadores. La estrategia anti-reptiles con una alta tasa de lesiones accidentales no se puede usar sin importar cuán bueno sea el efecto.
Bloquear : Bloqueó con éxito el acceso del rastreador. Habrá el concepto de tasa de intercepción aquí. En términos generales, cuanto mayor sea la tasa de intercepción de la estrategia anti-reptil, mayor será la posibilidad de lesiones accidentales. Así que se necesita hacer una compensación.
Recurso : La suma del costo de la máquina y el costo de la mano de obra.

2.2 El proceso básico del rastreador 

(1) Solicitar una página web:
inicie una solicitud al sitio de destino a través de la biblioteca HTTP, es decir, envíe una Solicitud, la solicitud puede incluir encabezados adicionales y otra información, ¡
y espere a que el servidor responda!
contenido correspondiente:
si el servidor puede responder normalmente, obtendrá una respuesta, el contenido de la respuesta es el contenido de la página que se obtendrá, el tipo puede ser HTML, cadena Json, datos binarios (como imágenes y videos) y otros tipos
(3) Contenido de análisis:
el contenido obtenido puede ser HTML, que se puede analizar con expresiones regulares y bibliotecas de análisis de páginas web. Puede ser Json, que se puede
convertir directamente en análisis de objetos Json, o datos binarios, que se pueden guardar o procesar más.
(4) Almacene y analice datos:
guárdelos en varias formas, que se pueden guardar como texto, en una base de datos o en un formato específico
Caso de prueba:
Implementación de código: Rastreo de los datos de la página de precios de la vivienda en Guiyang

#==========导 包=============
import requests

#=====step_1 : 指 定 url=========
url = 'https://gy.fang.lianjia.com/ /'

#=====step_2 : 发 起 请 求 :======
#使 用 get 方 法 发 起 get 请 求 , 该 方 法 会 返 回 一 个 响 应 对 象 。 参 数 url 表 示 请 求 对 应 的 url
response = requests . get ( url = url )

#=====step_3 : 获 取 响 应 数 据 :===
#通 过 调 用 响 应 对 象 的 text 属 性 , 返 回 响 应 对 象 中 存 储 的 字 符 串 形 式 的 响 应 数 据 ( 页 面 源 码数 据 )
page_text = response . text

#====step_4 : 持 久 化 存 储=======
with open ('贵阳房价 . html ','w', encoding ='utf -8') as fp:
    fp.write ( page_text )
print (' 爬 取 数 据 完 毕 !!!')

                                                         

爬 取 数 据 完 毕 !!!

Process finished with exit code 0

3 Rastreando los precios de la vivienda en Guiyang y escribiendo en la mesa

3.1 Visualización de resultados

 

3.2 Implementación de código (Python) 

#==================导入相关库==================================
from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd


#=============读取网页=========================================
def craw(url,page):
    try:

        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"}
        html1 = requests.request("GET", url, headers=headers,timeout=10)
        html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的
        html=html1.text

        return html
    except RequestException:#其他问题
        print('第{0}读取网页失败'.format(page))
        return None
#==========解析网页并保存数据到表格======================
def pase_page(url,page):
    html=craw(url,page)
    html = str(html)
    if html is not None:
        soup = BeautifulSoup(html, 'lxml')
        "--先确定房子信息,即li标签列表--"
        houses=soup.select('.resblock-list-wrapper li')#房子列表
        "--再确定每个房子的信息--"
        for j in range(len(houses)):#遍历每一个房子
            house=houses[j]
            "名字"
            recommend_project=house.select('.resblock-name a.name')
            recommend_project=[i.get_text()for i in recommend_project]#名字 英华天元,斌鑫江南御府...
            recommend_project=' '.join(recommend_project)
            #print(recommend_project)
            "类型"
            house_type=house.select('.resblock-name span.resblock-type')
            house_type=[i.get_text()for i in house_type]#写字楼,底商...
            house_type=' '.join(house_type)
            #print(house_type)
            "销售状态"
            sale_status = house.select('.resblock-name span.sale-status')
            sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...
            sale_status=' '.join(sale_status)
            #print(sale_status)
            "大地址"
            big_address=house.select('.resblock-location span')
            big_address=[i.get_text()for i in big_address]#
            big_address=''.join(big_address)
            #print(big_address)
            "具体地址"
            small_address=house.select('.resblock-location a')
            small_address=[i.get_text()for i in small_address]#
            small_address=' '.join(small_address)
            #print(small_address)
            "优势。"
            advantage=house.select('.resblock-tag span')
            advantage=[i.get_text()for i in advantage]#
            advantage=' '.join(advantage)
            #print(advantage)
            "均价:多少1平"
            average_price=house.select('.resblock-price .main-price .number')
            average_price=[i.get_text()for i in average_price]#16000,25000,价格待定..
            average_price=' '.join(average_price)
            #print(average_price)
            "总价,单位万"
            total_price=house.select('.resblock-price .second')
            total_price=[i.get_text()for i in total_price]#总价400万/套,总价100万/套'...
            total_price=' '.join(total_price)
            #print(total_price)

            #=====================写入表格=================================================
            information = [recommend_project, house_type, sale_status,big_address,small_address,advantage,average_price,total_price]
            information = np.array(information)
            information = information.reshape(-1, 8)
            information = pd.DataFrame(information, columns=['名称', '类型', '销售状态','大地址','具体地址','优势','均价','总价'])

            information.to_csv('贵阳房价.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入
        print('第{0}页存储数据成功'.format(page))
    else:
        print('解析失败')


#==================双线程=====================================
import threading
for i  in range(1,100,2):#遍历网页1-101
    url1="https://gy.fang.lianjia.com/loupan/pg"+str(i)+"/"
    url2 = "https://gy.fang.lianjia.com/loupan/pg" + str(i+1) + "/"

    t1 = threading.Thread(target=pase_page, args=(url1,i))#线程1
    t2 = threading.Thread(target=pase_page, args=(url2,i+1))#线程2
    t1.start()
    t2.start()

Supongo que te gusta

Origin blog.csdn.net/weixin_46039719/article/details/122797332
Recomendado
Clasificación