¿Qué datos puede rastrear Python?
1. Rastreando los enlaces de primera línea que necesitamos
channel_extract.py
Aquí los enlaces de primera línea son lo que llamamos categorías principales de enlaces:
channel_extract.py p>
desde bs4 importar BeautifulSoupimportar solicitudes
start_url = '/wu/'host_url = '/'def get_channel_urls(url):
wb_data = solicitudes.get(url)
sopa = BeautifulSoup(wb_data.text, 'lxml')
enlaces = sopa.select('.fenlei > dt > a') #print(links)
para enlace en enlaces:
page_url = host_url + link.get('href')
print(page_url)#get_channel_urls( start_url)channel_urls = ''' p>
/jiaju/
/rirongbaihuo/
/shouji/
/bangong/
/nongyongpin/ p>
/jiadian/
/ershoubijibendiannao/
/ruanjiantushu/
/yingyouyunfu/
/diannao/ p>
/xianzhilipin/
/fushixiaobaxuemao/
/meironghuazhuang/
/shuma/
/laonianyongpin/ p>
/xuniwupin/
'''123456789101112131415161718192021222324252627282930313233343536
Tome las 58 ciudades que rastreé como ejemplo, que es rastrear todas las categorías de enlaces en el mercado de segunda mano, que soy yo Las principales categorías de enlaces mencionadas anteriormente
Encuentre las características únicas de estos enlaces, use una función para generarlos y guárdelos como múltiples; texto de línea.
2. Obtenga el enlace y la información detallada de la página detallada que necesitamos
page_parsing.py
1. Hablemos de nuestra base de datos:
Primero mire el código:
#Introducir archivos de biblioteca desde bs4 importar BeautifulSoupimportar solicitudesimportar pymongo #Python opera la biblioteca MongoDB importar reimportar tiempo#Enlazar y establecer la base de datos cliente = pymongo.MongoClient('localhost', 27017 )
ceshi = client['ceshi'] #Construir base de datos ceshi ganji_url_list = ceshi['ganji_url_list'] #Crear archivo de tabla ganji_url_info = ceshi['ganji_url_info']123456789101112
2. Juicio Si la estructura de la página coincide con la estructura de la página que queremos, por ejemplo, a veces habrá una página 404;
3. Extraiga los enlaces que queremos de la página, es decir, el enlace a cada página de detalles. ;
De lo que vamos a hablar aquí es de un método:
item_link = link.get('href').split('?')[0]12 p>
¿Qué tipo es este enlace aquí y cuál es este método de obtención?
Más tarde descubrí que este tipo es
Si queremos obtener un determinado atributo individualmente, Podemos hacer esto, por ejemplo, ¿cuál es el nombre de su clase cuando la obtenemos?
imprimir sopa.p['clase']
#['título']12 p>
Esto también se puede hacer. Utilice el método get para pasar el nombre del atributo. Los dos son equivalentes
print sauce.p.get('class')#['title. ']12
Lo siguiente, pego el código:
#Rastrea todos los enlaces de la página de detalles del producto: def get_type_links(channel, num):
list_view = ' {0}o{1}/'. format(canal, str(num)) #print(list_view)
wb_data = request.get(list_view)
sopa = BeautifulSoup( wb_data.text, 'lxml') p>
linkOn = sopa.select('.pageBox') #Determine si es la bandera de la página que necesitamos;
#Si la selección El enlace bajado es así: div.pageBox > ul > li:nth-child(1) > a > span Aquí:nth-child(1) debe eliminarse
#print(linkOn) p>
si linkOn:
link = sopa.select('.zz > .zz-til > a')
link_2 = sopa.select('.js- item > a')
enlace = enlace + enlace_2 #print(len(enlace))
para enlacec en enlace:
enlacec = enlacec.get( 'href')
ganji_url_list .insert_one({'url': linkc})
print(linkc) else: pass1234567891011121314151617181920
4. necesito en la página de detalles
Permítanme publicar un fragmento de código:
Enlace de la página de detalles de #Crawling Ganji.com: def get_url_info_ganji(url):
hora .sleep(1)
wb_data = request.get(url)
sopa = BeautifulSoup(wb_data.text, 'lxml') prueba:
título = sopa.select('head > title')[0] .text
timec = sopa.select('.pr-5')[0].text.strip()
tipo = sopa.select('.det-infor > li > span > a')[0].text
precio = sopa.select('.det-infor > li > i')[ 0].text
place = sopa.select('.det-infor > li > a')[1:]
placeb = [] para placec en el lugar: p>
placeb.append(placec.text)
tag = sopa.select('.segundo-dt-bewrite > ul > li')[0].text
etiqueta = ''.join(tag.split() ) #print(time.split())
datos = { 'url' : url, 'título' : título, 'hora' : timec .split(), 'tipo': tipo, 'precio': precio, 'lugar': placeb, 'nuevo': etiqueta
}
ganji_url_info.insert_one(data) # Inserte un dato en la base de datos;
print(data) excepto IndexError: pass123456789101112131415161718192021222324252627282930
4.
main.py
Mire el código:
#Primero introduzca funciones y datos de otros archivos: desde multiprocesamiento import Pooldesde page_parsing import get_type_links,get_url_info_ganji,ganji_url_listfrom channel_extract import channel_urls#Función para rastrear todos los enlaces: def get_all_links_from(channel):
for i in range(1,100):
get_type_links(channel,i)#Luego ejecute esta función Archivo se utiliza para rastrear todas las páginas de detalles: if __name__ == '__main__':# pool = Pool()# # pool = Pool()# pool.map(get_url_info_ganji, [url['url'] for url in ganji_url_list. find() ])# pool.close()# pool.join()# Primero ejecute la siguiente función para rastrear todos los enlaces: if __name__ == '__main__':
pool = Pool()
pool = Pool()
pool.map(get_all_links_from,channel_urls.split())
pool.close()
pool.join() 1234567891011121314151617181920212223242526
5. Programa de conteo
count.py
Se utiliza para mostrar el número de datos rastreados;
importar tiempo desde page_parsing importar ganji_url_list ,ganji_url_info while True: # print(ganji_url_list.find().count())
# time.sleep(5)
print(ganji_url_info. find().count())
tiempo.dormir(5)