1

我想抓取这个网页:http: //goo.gl/Eqfiuy

我想将输入作为列表中的日期提供,scrapy 应该将该值提供给表单并通过提供响应“打印报告”重定向到结果页面。然后我想解析其中的数据。

我的问题是如何让scrapy为html id提供输入日期?

我正在使用scrapy 0.16.5、ubuntu 12.04、firefox+firebug+firefinder

请给出示例代码

4

2 回答 2

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)
于 2013-08-02T10:51:51.683 回答
1

基本上,此表单向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)

请注意,embed生成的 html 中有一个标签,里面有一个 pdf - 它保存到output.pdf.

希望有帮助。

于 2013-07-30T11:03:58.683 回答