Conseguir el pitón real reptil que se arrastra deportivos americanos datos del juego de baloncesto (selenio + XPath)

directorio

 

En primer lugar, los datos que se deben observar y rastreo url

En segundo lugar, la estructura de la página web se analiza

3. Los datos de rastreo


En primer lugar, los datos que se deben observar y rastreo url

 

  1. URL siguió detrás de un-index.html, que luego abrir un par de algunas caras y se encontró que es el final del formato enlaces son sufijo "minúscula -index.html" es, arbitrariamente construido enlace de jengibre sufijo empalme, la final después de un buen URL empalmado a un recipiente de almacenamiento.
  2. A continuación, se analizan los datos, observadas después de que todos los datos que todos necesitamos, sin datos innecesarios. (Si cualquier cantidad no utilizada, entonces no se arrastra de datos que se arrastran en el momento de éste)
  3. Encontrado para enlazar el extremo de la x-index.html no está abierto durante el rastreo, el problema no está buscando después del descubrimiento de este enlace, x de la fuente es de color negro. Por lo tanto, cuando se construye una URL, no construir este URL.
# 构造链接尾部方法 
def getUrls(self,head_url):
        urls = []
        for i in range(97,123):
            if i == 120:
                pass
            else:
                url = head_url
                url += chr(i)+'-index.html'
                urls.append(url)
        return urls

Tenga en cuenta que cuando los datos que se arrastran no ponen estos datos inútiles arrastrándose hacia abajo

En segundo lugar, la estructura de la página web se analiza

Pulse F12 para ver el código de la página, encontrar los datos que se arrastraban y mantenerla. No es difícil encontrar los datos que desea rastrear en el interior del tbody.

A continuación nos fijamos en los datos que estar dentro rastreado el que una etiqueta específica, encontrar todos los tr dentro de la etiqueta, no es difícil encontrar cada td corresponde a un conjunto de datos, hay dos datos diferentes bajo etiqueta td una dentro de la etiqueta.

trTags = tree.xpath('//tr[@data-row and not(@class)]')#通过xpath寻找有用的数据,
            for tag in trTags:
                try:
                    item = []
                    #xpath找出的是列表,故要在后面加[0],不然结果会有[]号
                    item.append(tag.xpath('./th[1]/text()')[0])
                    # 这个数据是存在a标签内部的
                    item.append(tag.xpath('./td[1]/a/text()')[0])
                    item.append(tag.xpath('./td[2]/text()')[0])
                    item.append(tag.xpath('./td[3]/text()')[0])
                    item.append(tag.xpath('./td[4]/a/text()')[0])
                    item.append(tag.xpath('./td[5]/text()')[0])
                    item.append(tag.xpath('./td[6]/text()')[0])
                    item.append(tag.xpath('./td[7]/text()')[0])
                    item.append(tag.xpath('./td[8]/text()')[0])
                    item.append(tag.xpath('./td[9]/text()')[0])
                    item.append(tag.xpath('./td[10]/text()')[0])
                    item.append(tag.xpath('./td[11]/text()')[0])
                    item.append(tag.xpath('./td[12]/text()')[0])
                    item.append(tag.xpath('./td[13]/text()')[0])
                    item.append(tag.xpath('./td[14]/text()')[0])
                    items.append(item)
                    item = []
                except:
                    pass

 

3. Los datos de rastreo

Cuando empecé a gatear datos mediante peticiones de solicitud de reacción, pero luego me encontré el tiempo para analizar el código para obtener la necesidad de datos que no está ahí, el problema se debe a que revise esta página es js importación dinámica, para lo cual me tipo de solución es utilizar una página de terceros paquete de selenio automatizado de prueba.

Por favor refiérase a la instalación de selenio instalar el selenio e instalar plug-in de Google

import requests
from selenium import webdriver
import re
from lxml import etree
from selenium.webdriver.common.action_chains import ActionChains
import time
import csv
        
class GetTiebaInfo(object):
    def __init__(self,url):
        self.url = url
        self.urls = self.getUrls(self.url)
        self.items = self.spider(self.urls)
        self.pipelines(self.items)
    
    def getUrls(self,head_url):
        urls = []
        for i in range(97,123):
            if i == 120:
                pass
            else:
                url = head_url
                url += chr(i)+'-index.html'
                urls.append(url)
        return urls

    #爬虫模块
    def spider(self, urls):
        items = []
        for url in urls:
            print(url)
            browser = webdriver.Chrome()
            browser.maximize_window()
            browser.get(url)
#             left_click = browser.find_element_by_css_selector(".ranker.poptip.sort_default_asc.center")#按钮处理
#             ActionChains(browser).double_click(left_click).perform()
            tree = etree.HTML(browser.page_source)
            trTags = tree.xpath('//tr[@data-row and not(@class)]')
            for tag in trTags:
                try:
                    item = []
                    item.append(tag.xpath('./th[1]/text()')[0])
                    item.append(tag.xpath('./td[1]/a/text()')[0])
                    item.append(tag.xpath('./td[2]/text()')[0])
                    item.append(tag.xpath('./td[3]/text()')[0])
                    item.append(tag.xpath('./td[4]/a/text()')[0])
                    item.append(tag.xpath('./td[5]/text()')[0])
                    item.append(tag.xpath('./td[6]/text()')[0])
                    item.append(tag.xpath('./td[7]/text()')[0])
                    item.append(tag.xpath('./td[8]/text()')[0])
                    item.append(tag.xpath('./td[9]/text()')[0])
                    item.append(tag.xpath('./td[10]/text()')[0])
                    item.append(tag.xpath('./td[11]/text()')[0])
                    item.append(tag.xpath('./td[12]/text()')[0])
                    item.append(tag.xpath('./td[13]/text()')[0])
                    item.append(tag.xpath('./td[14]/text()')[0])
#                     if tag.xpath('./td[15]/text()'):
#                         item.append(tag.xpath('./td[15]/text()')[0])
#                     else:
#                         item.append('')
                    items.append(item)
                    item = []
                except:
                    pass
        return items

    #对已经爬取的数据做后续处理
    def pipelines(self, items):
        file_name = 'basketball.csv'
        with open(file_name, 'a', errors='ignore', newline='',encoding='utf-8') as f:
            f_csv = csv.writer(f)
            f_csv.writerows(items)
            print('写入完毕')
                
if __name__ == '__main__':
    url = u'https://www.sports-reference.com/cbb/coaches/'
    GTI = GetTiebaInfo(url)

 

 

Publicado 26 artículos originales · ganado elogios 27 · vistas 6874

Supongo que te gusta

Origin blog.csdn.net/qq_40705355/article/details/86542862
Recomendado
Clasificación