2017-10-17 10 views
0

私は1つの関数で小さなWebクローラーを作った、upso_finalです。python print()は私が期待しているものを出力しません

私がprint(upso_final())の場合、タイトル、住所、電話番号を含む15のリストが得られます。しかし、タイトルのみを印刷したいので、変数のタイトルをグローバル文字列にしました。私がそれを印刷するとき、私は唯一のタイトル、実行の最後の1つを得る。私は15タイトルすべてを手に入れたい。

from __future__ import unicode_literals 

import requests 
from scrapy.selector import Selector 
import scrapy 
import pymysql 

def upso_final(page=1): 
    def upso_from_page(url): 
     html = fetch_page(url) 
     sel = Selector(text=html) 

     global title,address,phone 
     title = sel.css('h1::text').extract() 
     address = sel.css('address::text').extract() 
     phone = sel.css('.mt1::text').extract() 
     return { 
      'title' : title, 
      'address' : address, 
      'phone' : phone 
     } 
    def upso_list_from_listpage(url): 
     html = fetch_page(url) 
     sel = Selector(text=html) 
     upso_list = sel.css('.title_list::attr(href)').extract() 

     return upso_list 
    def fetch_page(url): 
     r = requests.get(url) 
     return r.text  

    list_url = "http://yp.koreadaily.com/list/list.asp?page={0}&bra_code=LA&cat_code=L020502&strChar=&searchField=&txtAddr=&txtState=&txtZip=&txtSearch=&sort=N".format(page) 
    upso_lists = upso_list_from_listpage(list_url) 
    upsos = [upso_from_page(url) for url in upso_lists] 
    return upsos 

upso_final() 

print (title,address,phone) 
+1

あなたは 'print'を1つしか持っていないので、ループには入っていないので、1行の出力しか得られません。あなたのロジックにはいくつかの作業が必要です。 –

+0

解決に至ったときは、有用なものを優先して投票し、好きな答えを受け入れることを覚えておいてください。そうすれば、Stack Overflowは問題を適切にアーカイブすることができます。 – Prune

答えて

0

基本的な問題は、値を関数から渡すことについて混乱していることです。

upso_from_pageは、15個のレコードのそれぞれを順番に見つけ、必要な情報をグローバル変数に配置します(通常は悪い設計です)。ただし、結果を印刷するのは、すべて15を見つけた後だけです。ロジックに前のレコードを上書きする各レコードがあるため、最後に見つかったものだけを印刷します。

upso_finalはリストを累積して返しますが、その戻り値は無視されます。代わりに、あなたのメインプログラムでこれを試してみてください。

upso_list = upso_final() 

for upso in upso.list: 
    print (upso) 

これはあなたに、各upsoレコードの3項目の辞書を与える必要があります。そこから、あなたの嗜好を参照してフォーマットを学ぶことができます。


代替ソリューションは、あなたがそれを見つけるようupso_from_pageの中から、各レコードを印刷することですが、あなたの全体的なデザインは、それはあなたが望むものではありません示唆しています。

+0

ああ...ありがとうございました。分かりました、 – hoseongki

関連する問題