2017-02-03 1 views
0

私は入力としてURLを取る変数DOMAINを持っています。私はtxtファイルからURLのリストを一つずつフィードしたいのですが。Pythonのtxtから行ごとに変数への入力を受け入れる

マイtxtファイルは次のようになります。

www.yahoo.com 
www.google.com 
www.bing.com 

私はこれをやっている:

with open('list.txt') as f: 
    content = f.readlines() 
content = [x.strip() for x in content] 
DOMAIN = content 

しかし、可変ドメインはありません、別途、一度すべてのURLを取ります。 1つのURLを全体として、別のURLを別の操作で処理する必要があります。

このDOMAIN変数は、クロールのための治療に使用されます。コードベースの 一部:

from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 
with open('list.txt') as f: 
    content = f.readlines() 
# you may also want to remove whitespace characters like `\n` at the end of each line 
content = [x.strip() for x in content] 
DOMAIN = content 
URL = 'http://%s' % DOMAIN 

class MySpider(BaseSpider): 
    name = DOMAIN 
    allowed_domains = [DOMAIN] 
    start_urls = [ 
     URL 
    ] 

エラー:単一のURLについて

scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://['www.google.com', 'www.yahoo.com', 'www.bing.com']> 
executing as scrapy runspider spider.py 

完全に動作するスクリプト---

from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 

DOMAIN = 'google.com' 
URL = 'http://%s' % DOMAIN 

class MySpider(BaseSpider): 
    name = DOMAIN 
    allowed_domains = [DOMAIN] 
    start_urls = [ 
     URL 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     for url in hxs.select('//a/@href').extract(): 
      if not (url.startswith('http://') or url.startswith('https://')): 
       url= URL + url 
      print url 
      yield Request(url, callback=self.parse) 

答えて

0

オクラホマので、あなたが作成しているドメインのリストを割り当てますDOMAINに。

content = DOMAIN 

あなたはその後、「のhttp://」を連結する必要があるこれらのそれぞれに:

with open('list.txt') as f: 
    content = f.readlines() 
content = [x.strip() for x in content] 
domain_list = content 
web = 'http://' 
start_url = [web + s for s in domain_list] 

その後、すべてのあなたのURLの、あなたが接続に使用することができたのリストを持っています。この後、あなたが何をしているのか分かりませんが、開始URLのリストを反復する必要があると思いますか?このことができます

for url in start_url: 
    scrapy.Request(url) 

希望、これらの線で

+0

私は実際にエラーを出しています。明確にするために、私は合計スクリプトをアップロードしています – user7423959

0

DOMAIN = content 
URL = 'http://%s' % DOMAIN 

はあなたがちょうどあなたのファイルから作成したリストにDOMAINポイントを作り、その後、http://と文字列表現を連結することができますあなたはこれを得ます:

`http://['www.google.com','www.yahoo.com', 'www.bing.com']' 

あなたのエラーです。あなたは、リストの各エントリに'http://'を連結する必要があります - あなたはリスト内包で直接ファイルを反復処理するのではなくreadlines()を使用してファイルを読みながら、あなたは、単にそれを行うことができます。

with open('list.txt','r') as f: 
    url_list = ['http://'+line.strip() for line in f] 

得られますどのあなたはscrapyを反復処理することができますリスト:それは本当に大きなファイルの場合、一度にしばらくのファイルを読み込むことは非効率的と考えることができることを

['http://www.google.com','http://www.yahoo.com', 'http://www.bing.com'] 

注意を。あなたは、ファイルの行ごとの処理として、その場合、あなたはリストにファイル全体を読み込む必要があり、単に要求を削除できます。

with open('list.txt','r') as f: 
    for line in f: 
     url = 'http://'+line 
     request = scrapy.http.Request(url) 
     # Do something with request here 

をまた、あなたが使用してはならないことに注意してください変数名はすべて大文字で、通常は定数のためにのみ使用されます。命名規則の詳細については、PEP8 - The Python Style Guidelinesをご覧ください。もちろん、これらはルールではなくガイドラインですが、後で従うと他の人があなたのコードに従うのが容易になります。

+0

私は実際にエラーを出しています。 – user7423959

関連する問題