Соберите стихи из ссылок на веб-страницу с помощью Scrapy и поместите их в текстовый файл .txt - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь собрать все стихи из категории "generalndice general alfabético" на этом сайте http://amediavoz.com/. Там появляется название стихов, на которые нужно кликнуть, чтобы перейти к самим стихам. В основном я хочу скопировать весь текст каждого стиха с каждой из этих страниц (текст в <p></p> в xpath "/ html / body / blockquote [2] / blockquote" на каждой из страниц), за исключением заключительной информации о стихотворение под <i></i> в коде HTML. Я хотел бы сохранить все в .txt файлах, один большой или один на страницу.

Этот код является попыткой сделать это.

import scrapy

class FirstSpider(scrapy.Spider):

    name = "FirstSpider"

    start_urls = ['http://amediavoz.com/']

    def start_requests(self):
        url = ['http://amediavoz.com/']
        yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        xp = "//a[@target='_blank']/@href"
        for url in response.xpath(xp).extract():
            page = response.url.split("/")[-2]
            filename = 'Poems=%s.txt' % page
            sub = url.css('blockquote')[1]
            with open(filename, 'wb') as f:
                f.write(sub.xpath('//font/text()').extract())
            self.log('Saved file %s' % filename)
            f.close()

Когда я запускаю код, я не получаю никакого сообщения об ошибке, но также не получаю никакого вывода, то есть текстовый файл.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 января 2020

Извините, я не знаю Спани sh. Я просто грубо извлекаю текст, не обязательно прав. Если вы сможете пометить, какие данные вам нужно извлечь из HTML, я помогу вам изменить код.

from simplified_scrapy.spider import Spider, SimplifiedDoc
class FirstSpider(Spider):
  name = 'FirstSpider'
  start_urls = ['http://amediavoz.com/']
  refresh_urls = True

  def extract(self, url, html, models, modelNames):
    try:
      doc = SimplifiedDoc(html)
      if url['url']==self.start_urls[0]:
        lstA = doc.listA(url=url['url'],start='blockquote',end='La voz de los poetas')
        return [{"Urls":lstA}]

      blockquotes = doc.getElementsByTag('blockquote')
      page = url['url'].split("/")[-1]
      filename = 'data/Poems=%s.txt' % page
      with open(filename, 'w') as f:
        for blockquote in blockquotes:
          f.write(blockquote.getText('\n'))
          f.write('\n')
      print ('Saved file %s' % filename)
      return True
    except Exception as e:
      print ('extract',e)

from simplified_scrapy.simplified_main import SimplifiedMain
SimplifiedMain.startThread(FirstSpider())# start scrapping
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...