2017-02-09 100 views
0

这是我想要做的。我想从一些网站上刮取电子邮件。我有一个文件,我可以输入scrapy的所有url列表。这是我想提取电子邮件:Scrapy上的Scrapy错误

import scrapy 
import datetime 
import re 
from scrapy.spiders import CrawlSpider 
from techfinder.items import EmailItem 
from scrapy.selector import HtmlXPathSelector 


class DetectSpider(scrapy.Spider): 
    name = "test" 

    start_urls = ["http://example.com"]#[url.strip() for url in starturlfile.readlines()] 


    def parse(self, response): 

     DOWNLOADER_MIDDLEWARES = 
     { 
      'scrapy_proxy_rotator.ProxyMiddleware': 1, 
     } 

     PROXY_ROTATOR = 
     { 
      'username': 'user1', 
      'password': 'pass1', 
      'proxies_file': 'proxies.txt', 
     } 
     emails = re.findall(r'[\w\.-][email protected][\w\.-]+', response.body)   
     emailitems = [] 
     for email in zip(emails): 
      emailitem = EmailItem() 
      emailitem["email"] = emails 
      emailitem["source"] = response.url 

     return emailitems 

我跑的命令:

scrapy runspider scrapyDemo.py -o t.json -t json 

,并得到了错误:

2017-02-09 12:58:34 [scrapy.utils.log] INFO: Scrapy 1.3.0 started (bot: scrapybot) 
2017-02-09 12:58:34 [scrapy.utils.log] INFO: Overridden settings: {'FEED_FORMAT': 'json', 'FEED_URI': 't.json'} 
Usage 
===== 
    scrapy runspider [options] <spider_file> 

runspider: error: Unable to load 'scrapyDemo.py': No module named techfinder.items 

为什么我得到这个错误?另外我怎样才能抓取完整的网站,并使用我的程序以优化的方式获取电子邮件?我正在使用代理服务器来支持多个代理服务器。如果可能的话,我可以如何在代码中添加用户代理定义?
请帮我解决这个问题。
请让我告诉你我不是在刮垃圾邮件。由于我有很多网站我试图从中获取电子邮件。

+0

是否有任何人谁可以帮我用它? –

回答

0

run spider命令,你需要不使用的文件名,但一个Spider的名字,它被设置在类中的属性:

class DetectSpider(scrapy.Spider): 
    name = "test" 
    .... 

所以:

$ scrapy runspider test -o t.json -t json 
+0

请你能告诉我这个错误是什么意思。我尝试用你指定的方式:'用途 ===== scrapy runspider [选项] runspider:错误:未找到文件:测试 '你能请阅读我的问题,让我知道你的建议。我会很高兴听到:) –

+0

看起来你的scrapy安装无效。尝试列出所有的蜘蛛:'scrapy list'。还应该有一个文件'scrapy.cfg',其中包含'[settings]'部分 - 查找设置的位置以及'[deploy]' - 所有文件都位于哪里。 –

+0

蜘蛛应位于相对于安装根目录的'/spiders'文件夹中。 –