2016-06-09 3 views
-1

Я последовал за ссылкуКак сканировать каждую ссылку на данный сайт и весь текст, используя Scrapy

https://stackoverflow.com/questions/19254630/how-to-use-scrapy-to-crawl-all-items-in-a-website

но вещи не работает для меня.

Я пытаюсь узнать соскоб данные по web.I осуществляет учебник, приведенный на http://scrapy.readthedocs.io/en/latest/intro/examples.html

и способны ползать по заданной ссылке здесь является пример кода оснастки

from scrapy.spiders import Spider 
from scrapy.selector import Selector 

from dirbot.items import Website 


class DmozSpider(Spider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/", 
    ] 

    def parse(self, response): 
     """ 
     The lines below is a spider contract. For more info see: 
     http://doc.scrapy.org/en/latest/topics/contracts.html 

     @url http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/ 
     @scrapes name 
     """ 
     sel = Selector(response) 
     sites = sel.xpath('//ul[@class="directory-url"]/li') 
     items = [] 

     for site in sites: 
      item = Website() 
      item['name'] = site.xpath('a/text()').extract() 
      item['url'] = site.xpath('a/@href').extract() 
      item['description'] = site.xpath('text()').re('-\s[^\n]*\\r') 
      items.append(item) 

     return items 

и код оснастки для Деталь

from scrapy.item import Item, Field 


class Website(Item): 

    name = Field() 
    description = Field() 
    url = Field() 

Я могу запустить искатель, используя scrapy crawl dmoz

, но не в состоянии достичь следующие вещи

1. All given link on website 
2. Didn't get all text from all possible link 
3. Want to save them to a file 

Может кто-то один наставит меня, за то, что изменения нужно сделать в моем коде, так что я могу достичь своей цели?

ответ

0
  1. Все дается ссылка на сайт

    Ответ не class="directory-url" в нем. Вы можете получить все предоставленные ссылки с веб-сайта, используя вместо этого sites = sel.xpath('//a/@href'). фильтровать необходимые URLs

    Или

    Если вы можете начать с основного домена (http://www.dmoz.org/), как

    doc = html.fromstring(response.body) sites = doc.xpath('.//section[@id="category-section"]//aside')

    for site in sites: item = StackDemoItem() item['name'] = site.xpath('.//div/h2/a/text()') item['url'] = site.xpath('.//div/h2/a/@href')

    вы должны добавить доменное имя с item['url'], чтобы получить правильный url.Do то же самое для других страниц, соответствующих этому URL-адресу.

  2. Не получить весь текст из всех возможных ссылку

    Большинство ссылок does't имеют текст вместе с ним. Таким образом, вы должны раздеться содержимое из URL itself.else text = sel.xpath('//a/text()')

  3. Хотите, чтобы сохранить их в файл

    Вы можете просто сохранить содержимое с помощью scrapy crawl your_crawler_name -o out.csv, использовать JSON или .TXT вместо CSV для такого рода файл.