我已尝试废弃不同的网页。首先,我使用解析函数中的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
答案 0 :(得分:1)
此处的问题是您限制域:allowed_domains = ["http://joongang.joins.com"]
如果我将其更改为allowed_domains = ["joins.com"]
我会在parse2
中获得结果并提取文章文本 - 作为unicode但是这样就可以了,因为该网站不是用拉丁字符编写的。
顺便说一下:您可以使用response.xpath()
而不是在response
对象上创建选择器。这需要更少的代码并使代码更容易。