我想抓取这个网页:http://goo.gl/Eqfiuy
我想将输入作为日期从列表中提取,scrapy应该将该值赋予表单,并通过给出响应“打印报告”将其重定向到结果页面。然后我想解析其中的数据。
我的问题是如何让scrapy为html id提供输入日期?
我正在使用scrapy 0.16.5,ubuntu 12.04,firefox + firebug + firefinder
请举一个示例代码
答案 0 :(得分:1)
基本上,此表单向http://164.100.167.12/pwd/report.php
发出POST请求。以下是如何在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
。
希望有所帮助。
答案 1 :(得分: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)