簡體   English   中英

如何在Scrapy Spider上實現Request函數

[英]How to implement Request function on scrapy spider

from string import join
from scrapy.contrib.spiders.crawl import CrawlSpider
from scrapy.selector import Selector
from scrapy.http.request import Request
from article.items import ArticleItem

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

    start_urls = ["http://news.joins.com/%s" % classification for 
    classification in j_classifications]

def parse_item(self, response):
    sel = Selector(response)
    urls = sel.xpath('//div[@class="bd"]/ul/li/strong')
    items = []         
    for url in urls:
        item = ArticleItem()
        item['url'] = url.xpath('a/@href').extract()
        items.append(item)

    request =  Request(items['url'], callback=self.parse_item2)
    request.meta['item'] = items     
    return request

def parse_item2(self,response):
    item = response.meta['item'] 
    sel = Selector(response)
    articles = sel.xpath('//div[@id=article_body]')
    for article in articles:
        item['article'] = article.xpath('text()').extract()
        items.append(item)

    return item

此代碼用於商品報廢。 我已經被沙皮了。 parse_item方法是針對使用請求函數發送到parse_item2的文章的url實現的。 但是此代碼不起作用。 Item類確實實現了url = Field(),article = Field()。 我怎么解決這個問題。 PS Web標記正確。 我確實在刮皮殼上進行了測試。

該行中的代碼有問題:

request =  Request(items['url'], callback=self.parse_item2)

itemsitem對象的列表。 因此它將引發TypeError。 您可以使用第二個for循環來完成此操作,

for itm in items:
    request =  Request(itm['url'], callback=self.parse_item2)
    request.meta['item'] = items     
    yield request

或者從第一個for循環產生一個請求,

for url in urls:
    item = ArticleItem()
    item['url'] = url.xpath('a/@href').extract()
    request =  Request(items['url'], callback=self.parse_item2)
    request.meta['item'] = items
    yield request

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM