2016-10-16 20 views
0

私はPythonには初めてですが、仕事のためにScrapyを使用するために頭を抱えようとしています。TypeError: 'HtmlResponse'オブジェクトは反復可能ではありません

私は現在、このチュートリアルを次のようだ: http://scrapy2.readthedocs.io/en/latest/intro/tutorial.html

私は(チュートリアルから)この部分で問題を抱えてきました:

def parse(self, response): 
    for sel in response.xpath('//ul/li'): 
     title = sel.xpath('a/text()').extract() 
     link = sel.xpath('a/@href').extract() 
     desc = sel.xpath('text()').extract() 
     print title, link, desc 

私がいる問題がfor sel in response.xpath('//ul/li'):一部であります。私はxpathに一致するものにクロールされるものを本質的に絞り込むという行を理解しています//ul/li

私の実装では、ページを1つの特異なセクションに絞り込むことはできません。

def parse(self, response): 
      for sel in response.xpath('//html'): 
      title = sel.xpath('//h1/text()').extract() 
      author = sel.xpath('//head/meta[@name="author"]/@content').extract() 
      mediumlink = sel.xpath('//head/link[@rel="author"]/@href').extract() 
      print title, author, mediumlink 

XPathには、私が使用クロームプラグインの両方で働く、と私は変更しようとしたscrapy shell

response.xpath('//title').extract()を使用して:私は以下の私の試みを参照して、全体のHTMLを選択することで、これを回避しようとしましたこれまで行:

for sel in response.xpath('//html'):for sel in response.xpath('html'):

しかし、私はこれを取得するたびに:

2016-10-16 14:33:43 [scrapy] ERROR: Spider error processing <GET https://medium.com/swlh/how-our-app-went-from-20-000-day-to-2-day-in-revenue-d6892a2801bf#.smmwwqxlf> (referer: None) 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 587, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "/Users/Matthew/Sites/crawl/tutorial/tutorial/spiders/medium_Spider.py", line 11, in parse 
    for sel in response: 
TypeError: 'HtmlResponse' object is not iterable 

誰かが私にこの問題を解決する最善の方法についていくつかの指摘をしてもらえますか?私の上で簡単に行く、私のスキルはそれほど熱くない。ありがとう!エラーメッセージとして

+0

「」ノードは1つのみです。iterableではありません –

+0

何を試してみるべきですか? – matt

+1

表示されるコードとエラーメッセージに一貫性がありません。エラーメッセージによると、あなたは 'response.xpath(...)'ではなく 'response'を反復しようとしています。 – Markus

答えて

1

はあなたがライン11であなたのmedium_Spider.pyファイルにresponseオブジェクトを反復処理しようとし

for sel in response: 

述べています。

しかしresponseはあなたがforループ内で使用することができHtmlResponseない反復可能なある - >あなたはresponseにいくつかのメソッド呼び出しが欠落しています。あなたは、あなたの質問に書かれているようなループを行うようにしてください:.xpath('//html')はあなたがforループ内で使用できる反復可能なを返し

for sel in response.xpath('//html'):