Проблема с относительными ссылками в [закрытом] Scrapy

Я хочу поднять полные новости о ссылках, которые появляются в исходной странице информационного сайта. Но ссылки относительные

Сайт http://www.puntal.com.ar/v2/

И ссылки оказываются такими

Barros Schelotto: "No somos River y vamos a tratar de pasar a la final"

Ссылка была бы тогда, "/v2/article.php? id=187222"

Мой код - следующий:

# -*- coding: utf-8 -*-

from scrapy.selector import Selector
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http.request import Request
try:
    from urllib.parse import urljoin # Python3.x
except ImportError:
    from urlparse import urljoin # Python2.7

from puntalcomar.items import PuntalcomarItem


class PuntalComArSpider(CrawlSpider):
    name = 'puntal.com.ar'
    allowed_domains = ['http://www.puntal.com.ar/v2/']
    start_urls = ['http://www.puntal.com.ar/v2/']

    rules = (
            Rule(LinkExtractor(allow=(''),), callback="parse_url", follow=True),
        )

    def parse_url(self, response):
        hxs = Selector(response)
        urls = hxs.xpath('//div[@class="article-title"]/a/@href').extract()
        print 'enlace relativo ', urls
        for url in urls:
           urlfull = urljoin('http://www.puntal.com.ar',url)
           print 'enlace completo ', urlfull
           yield Request(urlfull, callback = self.parse_item)

    def parse_item(self, response):
        hxs = Selector(response)
        dates = hxs.xpath('//span[@class="date"]')
        title = hxs.xpath('//div[@class="title"]')
        subheader = hxs.xpath('//div[@class="subheader"]')
        body = hxs.xpath('//div[@class="body"]/p')
        items = []
        for date in dates:
            item =  PuntalcomarItem()
            item["date"] = date.xpath('text()').extract()
            item["title"] = title.xpath("text()").extract()
            item["subheader"] = subheader.xpath('text()').extract()
            item["body"] = body.xpath("text()").extract()
            items.append(item)
        return items

Но оно не функционирует.

Я использую Линукс Минт с Пайтоном 2.7.6

Вышедшая консолью scrapy:

$ scrapy crawl puntal.com.ar
2016-07-10 13:39:15 [scrapy] INFO: Scrapy 1.1.0 started (bot: puntalcomar)
2016-07-10 13:39:15 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'puntalcomar.spiders', 'SPIDER_MODULES': ['puntalcomar.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'puntalcomar'}
2016-07-10 13:39:15 [scrapy] INFO: Enabled extensions:
['scrapy.extensions.logstats.LogStats',
 'scrapy.extensions.corestats.CoreStats']
2016-07-10 13:39:15 [scrapy] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2016-07-10 13:39:15 [scrapy] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2016-07-10 13:39:15 [scrapy] INFO: Enabled item pipelines:
['puntalcomar.pipelines.XmlExportPipeline']
2016-07-10 13:39:15 [scrapy] INFO: Spider opened
2016-07-10 13:39:15 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-07-10 13:39:15 [scrapy] DEBUG: Crawled (404)  (referer: None)
2016-07-10 13:39:15 [scrapy] DEBUG: Redirecting (301) to  from 
2016-07-10 13:39:15 [scrapy] DEBUG: Crawled (200)  (referer: None)
enlace relativo  [u'/v2/article.php?id=187334', u'/v2/article.php?id=187324', u'/v2/article.php?id=187321', u'/v2/article.php?id=187316', u'/v2/article.php?id=187335', u'/v2/article.php?id=187308', u'/v2/article.php?id=187314', u'/v2/article.php?id=187315', u'/v2/article.php?id=187317', u'/v2/article.php?id=187319', u'/v2/article.php?id=187310', u'/v2/article.php?id=187298', u'/v2/article.php?id=187300', u'/v2/article.php?id=187299', u'/v2/article.php?id=187306', u'/v2/article.php?id=187305']
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187334
2016-07-10 13:39:15 [scrapy] DEBUG: Filtered offsite request to 'www.puntal.com.ar': 
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187324
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187321
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187316
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187335
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187308
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187314
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187315
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187317
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187319
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187310
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187298
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187300
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187299
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187306
enlace completo  http://www.puntal.com.ar/v2/article.php?id=187305
2016-07-10 13:39:15 [scrapy] INFO: Closing spider (finished)
2016-07-10 13:39:15 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 660,
 'downloader/request_count': 3,
 'downloader/request_method_count/GET': 3,
 'downloader/response_bytes': 50497,
 'downloader/response_count': 3,
 'downloader/response_status_count/200': 1,
 'downloader/response_status_count/301': 1,
 'downloader/response_status_count/404': 1,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2016, 7, 10, 16, 39, 15, 726952),
 'log_count/DEBUG': 4,
 'log_count/INFO': 7,
 'offsite/domains': 1,
 'offsite/filtered': 16,
 'request_depth_max': 1,
 'response_received_count': 2,
 'scheduler/dequeued': 2,
 'scheduler/dequeued/memory': 2,
 'scheduler/enqueued': 2,
 'scheduler/enqueued/memory': 2,
 'start_time': datetime.datetime(2016, 7, 10, 16, 39, 15, 121104)}
2016-07-10 13:39:15 [scrapy] INFO: Spider closed (finished)

Решение:

Не было descomentar конфигурации для одновременных запросов в settings.py

# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
CONCURRENT_REQUESTS_PER_DOMAIN = 16
CONCURRENT_REQUESTS_PER_IP = 16

Нравоучение: ' Ты совсем не установил'

2
задан 09.03.2017, 16:43
1 ответ

С которым ты выставляешь, он не является ясным, где - ошибка, ты ни показываешь полную ошибку. Я понимаю, что ошибка должна быть в методе parse_url. Посмотрим следующее ты функционирует:

try:
    from urllib.parse import urljoin # Python3.x
except ImportError:
    from urlparse import urljoin # Python2.7

# ...

class PuntalComArSpider(CrawlSpider):
    # ...

    def parse_url(self, response):
        hxs = Selector(response)
        urls = hxs.xpath('//div[@class="article-title"]/a/@href').extract()
        for url in urls:
           #################################################
           # La siguiente línea está adaptada
           urlfull = urljoin('http://www.puntal.com.ar',url)
           #################################################
           yield Request(urlfull, callback = self.parse_item)

Если оно ты не функционирует, пожалуйста, исправь твой вопрос для intar быть яснее на, где он дает тебе ошибку.

1
ответ дан 24.11.2019, 13:52
  • 1
    Спасибо за твой ответ, kikocorreoso, но уже hab и # 237; в протестированный с urljoin () однако не функция и # 243;. В любом случае volv и # 237; чтобы не пробовать с твоим советом и также функция и # 243;. – dedio 10.07.2016, 16:07
  • 2
    Corrigo и ccompleto предыдущий комментарий: Спасибо за твой ответ, kikocorreoso, но уже hab и # 237; в протестированный с urljoin (). В любом случае volv и # 237; чтобы пробовать с твоим советом, который незначительно отличный, в которое hab и # 237; в протестированный раньше и также функция и # 243;. В консоли, scrapy он не влечет за собой ning и # 250; n ошибка. Ни с urljoin () ни объединяя strings. Просто оно не функционирует. Привет. – dedio 10.07.2016, 16:17
  • 3
    #191; Из-за qu и # 233; ты не делаешь один print(urls), чтобы видеть, если est и # 225; разоряя urls правильной формы? Прямо сейчас, в ПК в том, который я, я не могу устанавливать вещи (работу). – kikocorreoso 10.07.2016, 18:06
  • 4
    Обрати внимание, что edit и # 233; c и # 243; я говорю с твоими рекомендациями и tambi и # 233; n agregu и # 233; вывод из-за консоли с print (). Prob и # 233; полные ссылки и они правильны. Tambi и # 233; n prob и # 233; рукописный шрифт из-за каждой ссылки, чтобы видеть, поднимает ли он text и s и # 237; он это делает. и #191; Смоги быть HTML stiio? Действительно не, который происходит. Спасибо снова. – dedio 10.07.2016, 19:56

Теги

Похожие вопросы