2017-01-30 2 views
1

Я пытаюсь очистить данные с помощью scrapy. Но возникли проблемы с редактированием кода. Вот что я сделал в качестве эксперимента:Использование Scrapy для очистки данных

import scrapy 

class BlogSpider(scrapy.Spider): 
    name = 'blogspider' 
    start_urls = ['http://anon.example.com/'] 

    def parse(self, response): 
     for title in response.css('h2'): 
      yield {'Agent-name': title.css('a ::text').extract_first()} 

     next_page = response.css('li.col-md-3 ln-t > div.cs-team team-grid > figure > a ::attr(href)').extract_first() 
     if next_page: 
      yield scrapy.Request(response.urljoin(next_page), callback=self.parse) 

Я использовал этот пример с сайта scrapy.org и попытался его модифицировать. Что делает этот код, так это извлечение имен всех агентов с данной страницы.
Но я хочу, чтобы эта лучевая терапия проходила внутри страницы агента и извлекала из нее информацию.
Скажет, например:

Name: name of the agent 
Phone: Phone Number 
Email: email address 
website: URL of website .. etc 

Надеется, что это проясняет мою проблему. Я хотел бы иметь решение этой проблемы.

ответ

1
import scrapy 

class BlogSpider(scrapy.Spider): 
    name = 'blogspider' 
    start_urls = ['http://anon.example.com'] 


    # get 502 url of name 
    def parse(self, response): 
     info_urls = response.xpath('//div[@class="text"]//a/@href').extract() 
     for info_url in info_urls: 
      yield scrapy.Request(url=info_url, callback=self.parse_inof) 
    # visit each url and get info 
    def parse_inof(self, response): 
     info = {} 
     info['name'] = response.xpath('//h2/text()').extract_first() 
     info['phone'] = response.xpath('//text()[contains(.,"Phone:")]').extract_first() 
     info['email'] = response.xpath('//*[@class="cs-user-info"]/li[1]/text()').extract_first() 
     info['website'] = response.xpath('//*[@class="cs-user-info"]/li[2]/a/text()').extract_first() 
     print(info) 

The name можно найти на странице подробно, так что в первом этапе, мы просто собираем все детали URL.

Затем мы посещаем весь URL и получаем всю информацию.

Может потребоваться очистка даты, но идея понятна.

+0

можно ли записать его в файл csv? –

+0

@Jaffer Wilson измените печать на 'yield info' и используйте командную строку' scrapy crawl spider_name -o out.csv'. '-o' означает выходной файл. пожалуйста, прочитайте документ для лечения. –

+1

Благодарим вас за ответ. Но не могли бы вы рассказать мне, как вы определяете глубину выскабливания? Как я вижу, есть URL-адреса страниц веб-сайта, и программа только прокручивает URL-адрес и не собирается на веб-сайт. Это хорошо . Вы можете объяснить мне, пожалуйста? –