2013-07-30 21 views

回答

1

基本上,这种形式使POST请求http://164.100.167.12/pwd/report.php。下面是如何在Scrapy模拟它:

from scrapy.http import FormRequest 
from scrapy.spider import BaseSpider 


class MySpider(BaseSpider): 
    name = "myspider" 
    allowed_domains = ["http://164.100.167.12/"] 
    report_date = '30/07/2013' 

    def start_requests(self): 
     yield FormRequest(url='http://164.100.167.12/pwd/report.php', 
          method='POST', 
          callback=self.parse_page, 
          formdata={'reportdate': self.report_date}) 

    def parse_page(self, response): 
     # save the pdf 
     with open('output.pdf', 'w') as f: 
      f.write(response.body) 

注意,有在生成的HTML的标签embed,有一个PDF里面 - 它保存到output.pdf

希望有所帮助。

+0

第一。我遇到错误说没有在文件中找到蜘蛛。我正在使用命令$ scrapy runspider file.py.这是错误:_runspider:错误:在文件file.py_中找不到蜘蛛。对不起,但我是使用Scrapy的新手。请告诉我我应该在终端中使用的命令重复您的过程。 –

+0

不客气。不要将其称为'file.py'。选择另一个名字。 – alecxe

+0

感谢它正在运行:) –

1

由于alecxe,这是工作代码:

都感谢你的帮助的
from scrapy.spider import BaseSpider 
from scrapy.http import FormRequest 
from datetime import date 
from dateutil.rrule import rrule, DAILY 

class MySpider(BaseSpider): 
    name = "tnpwd" 
    allowed_domains = ["http://164.100.167.12/"] 
    start_urls = ["http://164.100.167.12/pwd/report.php"] 

    def start_requests(self): 
     start_date = date(2012, 06, 15) 
     end_date = date(2012, 06, 20) 
     for i in rrule(DAILY, dtstart= start_date, until=end_date): 
      report_date = i.strftime('%d/%m/%Y') 
      file_name = i.strftime('%d_%m_%Y') 
      yield FormRequest(url='http://164.100.167.12/pwd/report.php', 
           method='POST', 
           callback=self.parse_page, 
           formdata={'reportdate': report_date}, 
           meta = {'file_name': file_name}) 
    def parse_page(self, response): 
     a= response.meta['file_name'] 
     print 'downloading %s' %a 
     with open('/home/USERNAME/Documents/test/%s.pdf' %a, 'w') as f: 
      f.write(response.body)