2017-02-03 2 views
0

Я пытаюсь очистить данные с веб-страницы. Веб-страница - это просто список пулей по 2500 URL-адресов. Scrapy выборки и идет к каждому и каждый URL и получать некоторые данные ...Scrapy: ValueError ('Отсутствует схема в запросе url:% s'% self._url)

Вот мой код

class MySpider(CrawlSpider): 
    name = 'dknews' 
    start_urls = ['http://www.example.org/uat-area/scrapy/all-news-listing'] 
    allowed_domains = ['example.org'] 

    def parse(self, response): 
     hxs = Selector(response) 
     soup = BeautifulSoup(response.body, 'lxml') 
     nf = NewsFields() 
     ptype = soup.find_all(attrs={"name":"dkpagetype"}) 
     ptitle = soup.find_all(attrs={"name":"dkpagetitle"}) 
     pturl = soup.find_all(attrs={"name":"dkpageurl"}) 
     ptdate = soup.find_all(attrs={"name":"dkpagedate"}) 
     ptdesc = soup.find_all(attrs={"name":"dkpagedescription"}) 
     for node in soup.find_all("div", class_="module_content-panel-sidebar-content"): 
      ptbody = ''.join(node.find_all(text=True)) 
      ptbody = ' '.join(ptbody.split()) 
      nf['pagetype'] = ptype[0]['content'].encode('ascii', 'ignore') 
      nf['pagetitle'] = ptitle[0]['content'].encode('ascii', 'ignore') 
      nf['pageurl'] = pturl[0]['content'].encode('ascii', 'ignore') 
      nf['pagedate'] = ptdate[0]['content'].encode('ascii', 'ignore') 
      nf['pagedescription'] = ptdesc[0]['content'].encode('ascii', 'ignore') 
      nf['bodytext'] = ptbody.encode('ascii', 'ignore') 
     yield nf 
      for url in hxs.xpath('//ul[@class="scrapy"]/li/a/@href').extract(): 
      yield Request(url, callback=self.parse) 

Теперь проблема заключается в том, что приведенный выше код потертости около 215 из 2500 статей. Она закрывается, давая эту ошибку ...

ValueError ('Missing схема в URL запроса:% s' % self._url)

Я понятия не имею, что является причиной этой ошибки ... .

Любая помощь очень ценится.

Благодаря

ответ

2

код ниже выглядит как вопрос:

for url in hxs.xpath('//ul[@class="scrapy"]/li/a/@href').extract(): 
    yield Request(url, callback=self.parse) 

, если какой-либо из URL'ами, не полное, например, выглядит как href="/path/to/page", а не href="http://domain.com/path/to/page", вы получите ошибку. Для того, чтобы убедиться, что вы давая правильные запросы вы можете использовать urljoin:

yield Request(response.urljoin(url), callback=self.parse) 

Scrapy способ заключается в использовании LinkExtractor хотя https://doc.scrapy.org/en/latest/topics/link-extractors.html