使用scrapy废弃不同的页面

时间:2015-10-16 10:42:55

标签: callback scrapy

我已尝试废弃不同的网页。首先,我使用解析函数中的xpath(@href)从第一页中删除url。然后我尝试在url页面中废弃来自解析函数请求回调的文章。但它没有工作...... 我该如何解决这个问题。

import scrapy
from string import join
from article.items import ArticleItem

class ArticleSpider(scrapy.Spider):
    name = "article"
    allowed_domains = ["http://joongang.joins.com"]
    j_classifications = ['politics','money','society','culture']

    start_urls = ["http://news.joins.com/politics",
        "http://news.joins.com/society",
        "http://news.joins.com/money",]

    def parse(self, response):
        sel = scrapy.Selector(response)
        urls = sel.xpath('//div[@class="bd"]/ul/li/strong[@class="headline mg"]')
        items = [] 

        for url in urls:
            item = ArticleItem()
            item['url'] = url.xpath('a/@href').extract()
            item['url'] = "http://news.joins.com"+join(item['url'])
            items.append(item['url'])

        for itm in items:
            yield scrapy.Request(itm,callback=self.parse2,meta={'item':item})

    def parse2(self, response):
        item = response.meta['item']
        sel = scrapy.Selector(response)

        articles = sel.xpath('//div[@id="article_body"]')

        for article in articles:
            item['article'] = article.xpath('text()').extract()
            items.append(item['article'])
        return items

1 个答案:

答案 0 :(得分:1)

此处的问题是您限制域:allowed_domains = ["http://joongang.joins.com"]

如果我将其更改为allowed_domains = ["joins.com"]我会在parse2中获得结果并提取文章文本 - 作为unicode但是这样就可以了,因为该网站不是用拉丁字符编写的。

顺便说一下:您可以使用response.xpath()而不是在response对象上创建选择器。这需要更少的代码并使代码更容易。