2016-11-25 2 views
0

Я могу только предположить, что это одна из самых основных вещей в Scrapy, но я просто не могу понять, как это сделать. В принципе, я очищаю одну страницу, чтобы получить список URL-адресов, содержащих обновления за неделю. Затем мне нужно переходить к этим ссылкам один за другим и очищать информацию от них. В настоящее время у меня установлены оба скребка, и они отлично работают вручную. Поэтому я сначала очищаю URL-адреса от первого скребка, затем жестко кодирую их как start_urls [] на втором скрепе.Scrapy - Скребки, найденные при очистке

Каков наилучший способ сделать это? Это так же просто, как вызвать другую функцию в файле скрепера, которая берет список URL-адресов и выполняет ли соскабливание?

Это скребок, который получает список URLs:

class MySpider(scrapy.Spider): 
    name = "myspider" 

    start_urls = [ ..... 
    ] 


    def parse(self, response): 
     rows = response.css('table.apas_tbl tr').extract() 
     urls = [] 
     for row in rows[1:]: 
      soup = BeautifulSoup(row, 'lxml') 
      dates = soup.find_all('input') 
     urls.append("http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value'])) 

Это скребок, который затем проходит через URL, один за другим:

class Planning(scrapy.Spider): 
    name = "planning" 

    start_urls = [ 
     ... 
    ] 


    def parse(self, response): 
     rows = response.xpath('//div[@id="apas_form"]').extract_first() 
     soup = BeautifulSoup(rows, 'lxml') 
     pages = soup.find(id='apas_form_text') 
     for link in pages.find_all('a'): 
      url = 'myurl.com/{}'.format(link['href']) 

     resultTable = soup.find("table", { "class" : "apas_tbl" }) 

Я тогда спас resultTable в файл , На данный момент я беру вывод списка URL-адресов и копирую его в другой скребок.

+0

Вы, вероятно, придетесь разделить код ваших пауков, чтобы сообщество здесь может помочь вам получить там. Не просматривая код, вам сложно найти решение, соответствующее текущему состоянию. –

+0

@paultrmbrth Я добавил код. –

ответ

0

Для каждой ссылки, что вы нашли с разбором вы можете запросить его и анализировать содержимое с другой функцией:

class MySpider(scrapy.Spider): 
    name = "myspider" 

    start_urls = [ ..... 
    ] 

    def parse(self, response): 
     rows = response.css('table.apas_tbl tr').extract() 
     urls = [] 
     for row in rows[1:]: 
      soup = BeautifulSoup(row, 'lxml') 
      dates = soup.find_all('input') 
      url = "http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value']) 
      urls.append(url) 
      yield scrapy.Request(url, callback=self.parse_page_contents) 

    def parse_page_contents(self, response): 
     rows = response.xpath('//div[@id="apas_form"]').extract_first() 
     soup = BeautifulSoup(rows, 'lxml') 
     pages = soup.find(id='apas_form_text') 
     for link in pages.find_all('a'): 
      url = 'myurl.com/{}'.format(link['href']) 

     resultTable = soup.find("table", { "class" : "apas_tbl" }) 
Смежные вопросы